嗨我有以下程序,它应该给我在当前时间给定时间之前创建的文件列表
def filesOlderThan(path,day,hour,mins):
file_list = []
for root, dirs, files in os.walk(path):
for a in files:
path1 = root + "\\"+ a
sub_time = datetime.datetime.today() - datetime.timedelta(days=day,hours=hour,minutes=mins)
r_time = time.mktime(sub_time.utctimetuple())
c_time = os.path.getctime(path1)
if(r_time < c_time):
file_list.append(path1)
count = len(file_list)
return file_list,count
files,count = filesOlderThan("C:\\Arena\\sample",0,0,10)
print count
for a in files:
print a
当我运行程序时
C:\Arena>python getFilesOlderThan.py
0
该程序适用于值小时值,但不适用于以下输入大小写
答案 0 :(得分:1)
r_time = time.mktime(sub_time.utctimetuple())
您将本地时间的文件时间戳与UTC中的当前时间进行比较。
您应该使用timetuple()
代替utctimetuple
。
您可以对功能进行一些小的改进,例如使用datetime
代替时间戳进行计算,使用datetime.now
代替today
并使用跨平台{{1}而不是硬编码的Windows分隔符。似乎没有必要计算函数内部列表的os.join
- 如果需要,可以在外面执行。
len
最后,如果您计划将这些时间戳发送到另一个系统,请记住将它们转换为utc(文件和当前)。您可能希望使用def filesOlderThan(path,day,hour,mins):
delta= datetime.timedelta(days=day,hours=hour,minutes=mins)
now= datetime.datetime.now()
file_list = []
for root, dirs, files in os.walk(path):
for a in files:
path1 = os.path.join(root, a)
c_time = datetime.datetime.fromtimestamp(os.path.getctime(path1))
if(now - delta < c_time):
file_list.append(path1)
return file_list
。