我正在尝试在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]
由于
答案 0 :(得分: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)
答案 1 :(得分: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
,以便您可以在选择文件时使用通配符。如果您可以更加具体地了解要选择的文件(例如,如果文件包含文件名中的日期戳),这可能会节省您的时间。
其次,我在ctime
函数中使用test
,但您可以轻松使用mtime
- 最后修改时间。
最后,我是时间特定的,而不仅仅是特定日期。
我唯一不确定的是这是否所有时区都安全。在深入研究文档之前,您可能需要通过示例进行检查。