如何制作带有文件修改日期的按时间顺序排列的文件列表

5 投票
1 回答
7561 浏览
提问于 2025-04-16 18:56

我想要创建一个列表,里面包含一个文件夹中所有扩展名为 .bas 的文件,并且这些文件是在2011年6月1日之后修改过的。此外,我还想知道如何让这个列表中的文件显示它们最后修改的日期和时间,比如说 'filename.bas 2011-06-04_AM.00.30'。

我还是个Python新手。我用下面的代码成功列出了扩展名为 .bas 的文件,并按日期排序:

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"))
files.sort(key=lambda x: os.path.getmtime(x))

但是我不知道怎么在列表中的文件名后面加上“ 日期”。

如果有任何建议,我会非常感激。

1 个回答

4

把文件和日期收集到一个元组的列表中,然后根据日期进行排序。下面是示例代码,里面的注释应该足够让你理解:

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]

如果想要反转排序的顺序,可以在sort执行时使用可选参数reverse

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条件,这真的很酷。

撰写回答