我想高效构建并填充一个列表,其中包含代表文件名的字符串。
文件名具有定义良好的结构,如下所示:
'20190810-012500_foo_bar_eggs.zip'
,
其中初始数字表示格式为 %Y%m%d-%H%M%S 的日期。
我希望按时间递减顺序构建列表。
以下适用于递增顺序,但我无法扭转它。 请注意,下面的 key 可能与根本不指定 key 的作用相同。我只想展示一种使用 key 的可能方式。
import os
import time
from blist import sortedlist
l = sortedlist([], key= lambda x: time.strptime(x[:15], '%Y%m%d-%H%M%S'))
for f in os.listdir(my_dir): # the number of files can be big
if "_foo_" in f: # I need to filter out some
l.add(f)
重要提示:对我来说最重要的是效率。简单的解决方案可以是在创建列表后简单地进行排序,像我的示例代码中那样使用键并在最后反转列表,仅在一个列表理解中完成上述所有操作,等等。我希望最大限度地减少操作次数并最大限度地提高效率。
我认为(并且可能是错误的)排序列表可能是一种有效的方式,但如果您有更好的了解,请告诉我。谢谢。
附言。 blist 文档 here .
最佳答案
时间.mktime
尝试使用 time.mktime()
将 strptime()
返回的 struct_time
转换为 float 。添加 -
符号以反转排序。
def newest_first(s):
return -time.mktime(time.strptime(s[:15], '%Y%m%d-%H%M%S'))
l = sortedlist([], key=oldest_first)
关于python:有效地构建和维护一个按降序排列的字符串列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57505438/