读取文件夹Python中两个日期之间的文件

时间:2013-06-13 21:35:31

标签: python date

我正在尝试在startdateenddate之间的文件夹中读取文件名。 (文件名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]

由于

2 个答案:

答案 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 - 最后修改时间。

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

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