如何按时间顺序列出文件,并对文件进行修改

2024-05-29 11:22:26 发布

您现在位置:Python中文网/ 问答频道 /正文

我想在扩展名为.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))

但我不知道如何将“date”附加到列表中的文件名中。

如有任何建议,将不胜感激。


Tags: 文件pathimport目录列表searchosdir
1条回答
网友
1楼 · 发布于 2024-05-29 11:22:26

收集元组列表中的文件和日期,并按日期元素对该列表进行排序。下面是示例代码,其中的注释应该足以理解它:

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条件,这非常酷。

相关问题 更多 >

    热门问题