在python中获取x天,y小时和z分钟之前创建的文件?

时间:2014-07-08 10:35:35

标签: python datetime timedelta

嗨我有以下程序,它应该给我在当前时间给定时间之前创建的文件列表

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

该程序适用于值小时值,但不适用于以下输入大小写

  1. 我将分钟设置为10
  2. 在C:\ Arena \ Sample
  3. 中创建一个文件
  4. 运行程序,程序没有给我文件。

1 个答案:

答案 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