Mar*_*kin 5 python datetime directory-listing
我想在一个扩展名为.bas的目录中创建这些文件的列表,并在2011年6月1日之后进行了修改.另外,我想知道如何选择让列表中的文件显示日期和文件上次修改的时间,例如'filename.bas 2011-06-04_AM.00.30'
我是一个蟒蛇新手.我能够列出具有.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))
Run Code Online (Sandbox Code Playgroud)
但我无法弄清楚如何将"日期"附加到列表中的文件名.
任何建议将非常感谢.
将文件和日期收集到元组列表中,并按日期元素对该列表进行排序。这是示例代码,其中的注释应该足以理解它:
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])
Run Code Online (Sandbox Code Playgroud)
或者,您可以使用列表理解来使代码更加紧凑和干净......
file_date_tuple_list = [(x,os.path.getmtime(x)) for x in files]
file_date_tuple_list.sort(key=lambda x: x[1])
Run Code Online (Sandbox Code Playgroud)
这两行将替换for第一个示例中的所有循环。
现在,如果您在列表中想要的是一个带有文件名和日期格式的字符串,那么...添加此导入...
from datetime import date
Run Code Online (Sandbox Code Playgroud)
该列表理解的另一行获取修改时间戳并将其格式化为字符串。
file_date_string_list = ["%s %s"%(x[0],date.fromtimestamp(x[1])) \
for x in file_date_tuple_list]
Run Code Online (Sandbox Code Playgroud)
要反转排序顺序,请在执行reverse中使用可选参数sort:
file_date_tuple_list.sort(key=lambda x: x[1],reverse=True)
Run Code Online (Sandbox Code Playgroud)
用于将日期限制为特定的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 ]
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,您可以if在列表理解中添加一个条件,这真的很酷。
| 归档时间: |
|
| 查看次数: |
7228 次 |
| 最近记录: |