2011-06-04 50 views
5

我想创建一个目录中扩展名为.bas,并在2011年6月1日之后修改的文件的列表。另外, d想知道如何选择列表中的文件与文件的最后修改日期和时间一起显示,例如'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)) 

但我无法弄清楚如何“日期”添加到列表中的文件名。

任何建议将非常感激。

+0

'key = lambda x:os.path.getmtime(x)' - >'key = os.path.getmtime' – 2011-06-04 19:55:56

回答

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] 

逆转排序的顺序使用可选参数reversesort执行:

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

+0

谢谢。这非常有帮助。如何修改它以使最新的文件成为第一个文件,并且仅在6月1日下午5点之后的文件将存在于file_date_string_list中,是否太麻烦了?再次感谢你。 – user235218 2011-06-04 16:00:59

+1

当然,请参阅问题的最后部分,我添加了可能需要的内容。如果我的回答有帮助,请将其投票并接受;) – 2011-06-04 19:55:00

相关问题