在元组列表中收集文件和日期,并按日期元素对列表进行排序。下面是示例代码,它的意见应足以理解:
from stat import S_ISREG, ST_CTIME, ST_MODE
import os, sys, time, glob
search_dir = r"e:\test"
files = filter(os.path.isfile, glob.glob(search_dir + "\\*.bas"))
file_date_tuple_list = []
for x in files:
d = os.path.getmtime(x)
#tuple with file and date, add it in a list
file_date_tuple = (x,d)
file_date_tuple_list.append(file_date_tuple)
#sort the tuple list by the second element which is the date
file_date_tuple_list.sort(key=lambda x: x[1])
或者,您可以使用列表理解,使代码更紧凑,更干净。
file_date_tuple_list = [(x,os.path.getmtime(x)) for x in files]
file_date_tuple_list.sort(key=lambda x: x[1])
这两行代替第一个例子中的所有for
循环。
现在如果你想在列表中什么是文件名和日期再格式化......添加此导入的字符串...
from datetime import date
以及与此列表理解另一条线是需要修改的时间戳并将其格式化为一个字符串。
file_date_string_list = ["%s %s"%(x[0],date.fromtimestamp(x[1])) \
for x in file_date_tuple_list]
逆转排序的顺序使用可选参数reverse
在sort
执行:
file_date_tuple_list.sort(key=lambda x: x[1],reverse=True)
为了限制日期以特定datetime
from datetime import datetime
limit = datetime(2011,01,05,17,0,0) #5pm , Jun 5 2011
file_date_string_list = ["%s %s"%(x[0],date.fromtimestamp(x[1])) \
for x in file_date_tuple_list \
if datetime.fromtimestamp(x[1]) > limit ]
正如你所看到的您可以在列表理解中添加if
条件,这非常酷。
'key = lambda x:os.path.getmtime(x)' - >'key = os.path.getmtime' – 2011-06-04 19:55:56