如何在Python中获取创建时间在x天、y小时和z分钟之前的文件?
你好,我有一个程序,它应该能给我列出在当前时间之前创建的文件列表。
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
这个程序在小时的情况下能正常工作,但在以下情况下就不行了:
- 我把分钟设置为10。
- 在C:\Arena\Sample目录下创建了一个文件。
- 运行程序后,程序没有给我这个文件。
2 个回答
0
我创建了这个函数,不过你可以对它进行修改。
import datetime
import time
def diff(file):
today = datetime.datetime.today()
file_mtime = time.ctime(os.path.getmtime(file))
t_ob = time.strptime(file_mtime)
t = time.strftime("%Y-%m-%d %H-%M-%S", t_ob)
file_d = datetime.datetime.strptime(t, "%Y-%m-%d %H-%M-%S")
minutes = divmod((today-file_d).total_seconds(), 60)
if (today - file_d).days > 30:
return f"{round(((today - file_d).days)/30)} months"
elif (today - file_d).days != 0:
return f"{(today - file_d).days} days"
elif minutes[0] > 59:
return f"{round(minutes[0]/60)} huors"
elif minutes[0] != 0:
return f"{round(minutes[0])} minutes"
else:
return f"{round(minutes[1])} seconds"
>>>diff("file.txt")
1
r_time = time.mktime(sub_time.utctimetuple())
你现在是在把文件的时间戳(本地时间)和当前的UTC时间进行比较。
你应该用 timetuple()
,而不是 utctimetuple
。
你可以对你的函数做一些小改进,比如用 datetime
来做计算,而不是用时间戳;用 datetime.now
替代 today
;还有,使用跨平台的 os.join
,而不是硬编码的Windows分隔符。此外,在函数内部计算列表的 len
似乎也没必要,如果需要的话可以在外面计算。
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
最后,如果你打算把这些时间戳发送到其他系统,记得把它们转换成UTC时间(包括文件的和当前的时间)。你可能会想用 pytz
来实现这一点。