Python 如何按时间顺序列出文件以及文件修改日期

Python 如何按时间顺序列出文件以及文件修改日期,python,datetime,directory-listing,Python,Datetime,Directory Listing,我想在目录中创建扩展名为.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"

我想在目录中创建扩展名为.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”


任何建议都将不胜感激。

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

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

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

谢谢。这真是太有帮助了。向我展示如何修改它会不会太麻烦,这样最新的文件会排在第一位,并且只有6月1日下午5点之后的文件才会出现在文件列表中?再次感谢。当然,请看问题的最后一部分,我在那里添加了您可能需要的内容。如果我的回答有帮助,请投赞成票并接受;)
key=lambda x:os.path.getmtime(x)
->
key=os.path.getmtime