0

我正在尝试读取startdate和之间的文件夹中的文件名enddate。(Datestamp在文件名上)

我正在尝试这样的事情。有没有更好或更有效的方法来做到这一点?我在该文件夹中有数千个文件,但根据开始/结束日期值,我通常会在它们之间有一小部分文件。

startdate = "05/05/2013"
enddate = "06/06/2013"
mypath = "C:\\somepath\\"
onlyfiles = [ f for f in listdir(mypath) if isfile(join(mypath,f)) ]
for filetoread in onlyfiles:
  filesBetweenDate = [ f for f in time.strftime('%m/%d/%Y',   time.gmtime(os.path.getmtime(somepath+filetoread ))) if f > startdate and f < enddate]

谢谢

4

2 回答 2

0

这避免了遍历文件夹:

from datetime import datetime, timedelta
start = datetime.strptime('05/06/2013', '%m/%d/%Y')
end = datetime.strptime('06/05/2013', '%m/%d/%Y')
filesBetweenDate = []
while start <= end:
    f = start.strftime('%m/%d/%Y')
    if isfile(join(mypath,f))
        filesBetweenDate.append(f)
    start += timedelta(1)
于 2013-06-13T22:06:44.763 回答
0

这应该可以解决问题,具有几个不错的额外功能,并且只需一次通过循环。

import calendar
from datetime import datetime
import os
import glob, os

mypath = "/Users/craigmj/"
timefmt = "%Y%m%d %H:%M:%S"
start = calendar.timegm(datetime.strptime("20130128 00:00:00", timefmt).timetuple())
end = calendar.timegm(datetime.strptime("20130601 00:00:00", timefmt).timetuple())

def test(f):
    if (not os.path.isfile(f)):
        return 0
    (mode, ino, dev, nlink, uid, gid, size, atime, mtime, ctime) = os.stat(f)

    return start<=ctime and end>=ctime

files = [f for f in glob.glob(os.path.join(mypath, "*")) if test(f)]
for f in files:
   print(f)

首先,我使用glob.glob这样您就可以在选择文件时使用通配符。如果您可以更具体地了解要选择的文件(例如,如果您的文件在文件名中包含日期戳),这可能会节省您的时间。

其次,我ctimetest函数中使用,但您可以轻松使用mtime- 最后修改时间。

最后,我是特定时间的,而不仅仅是特定日期的。

我唯一不能 100% 确定的是这是否是所有时区安全的。在深入研究文档以做出决定之前,您可能需要通过示例进行检查。

于 2013-06-13T22:06:57.193 回答