从当前目录的日期范围获取文件

时间:2015-08-04 23:36:29

标签: python

这是我的示例路径:' c:\ Data \ 2015-08-01'

目前我在一(1)个特定日期收到所有文件,但我的目标是获取日期范围为file folder的文件。示例是2015-08-01到2015-08-05'就像MySQL中的BETWEEN查询

一样
import os
import os.path
import tempfile

dateStart = '2015-08-01'
dateEnd = '2015-08-05'

year = dateStart[0:4]
yearMonth = year + '_' + dateStart[5:7] 

pathDir = 'c:\\Data'
date_folder = pathDir  + '\\' + dateStart

count = 0
for filefolder in os.listdir(date_folder):
     filefolder = date_folder + "\\" + filefolder
        for file in os.listdir(filefolder): 
            if "txt" in file:
                filename = filefolder + "\\" + file 
                    print filename
                    #Output of this, is all text files for this date only '2015-08-01'

我很难循环播放日期范围的文件,例如' 2015年8月1日'到2015-08-05'。怎么做?

请注意,我的日期后面有一个文件夹,文本文件位于最后一个文件夹中。并且包含在该文件夹上的文本文件是我的要点。所以从我的旧代码中我使用了这个:filefolder = date_folder +" \" + filefolder仅在1个​​日期获取文本。

以下是我的示例实际路径数据:

 \\10.81.67.162\DLCx Logs\DLCx02\2015\2015_08\2015-08-01\Folder\data.text

如果我将从2015-08-01到2015-08-01获得该范围。这将是输出:

 \\10.81.67.162\DLCx Logs\DLCx02\2015\2015_08\2015-08-01\Folder\data.text
 \\10.81.67.162\DLCx Logs\DLCx02\2015\2015_08\2015-08-02\Folder\data.text
 \\10.81.67.162\DLCx Logs\DLCx02\2015\2015_08\2015-08-03\Folder\data.text
 \\10.81.67.162\DLCx Logs\DLCx02\2015\2015_08\2015-08-04\Folder\data.text
 \\10.81.67.162\DLCx Logs\DLCx02\2015\2015_08\2015-08-05\Folder\data.text

3 个答案:

答案 0 :(得分:2)

这是我的方法:从单独的年,月,日开始并建立日期:

import glob
import os


pattern = os.path.join(r'C:\Data', '{}-{:02}-{:02}', '*', '*.txt')

year, month = 2015, 8
start_day, end_day = 1, 5

for day in range(start_day, end_day + 1):
    wildcard = pattern.format(year, month, day)
    for filename in glob.glob(wildcard):
        print filename

答案 1 :(得分:1)

datetime模块进行日期算术,比较,以及相对容易地将它们转换为字符串或从字符串转换。

以下是它可以用来做你想要完成的事情(至少根据你最近的评论):

from datetime import datetime, timedelta
from glob import glob
from os import path

DATE_FORMAT = '%Y-%m-%d'
SUBFOLDER_PATH_FORMAT = r'%Y\%Y_%m\%Y-%m-%d\Folder'
pathDir = r'\\10.81.67.162\DLCx Logs\DLCx02'
dateStart = '2015-08-01'
dateEnd = '2015-09-01'
start_date = datetime.strptime(dateStart, DATE_FORMAT).date()
end_date = datetime.strptime(dateEnd, DATE_FORMAT).date()
delta_one_day = timedelta(days=1)

date = start_date
while date <= end_date:
    subfolder_path = date.strftime(SUBFOLDER_PATH_FORMAT)
    data_folder = path.join(pathDir, subfolder_path)
    if path.isdir(data_folder):
        for filename in glob(os.path.join(data_folder, '*.txt')):
            print filename
    date += delta_one_day

答案 2 :(得分:0)

最简单的方法是将日期转换为日期对象。然后你可以比较它们。见下面的例子:

#!/usr/bin/python

import os
import os.path
import tempfile
import datetime
import re

dateStart = '2015-08-03'
dateEnd = '2015-08-05'

# helper function to convert date strings to date objects
def make_dt(ds):
    return datetime.date(int(ds[0:4]), int(ds[5:7]), int(ds[8:10]))

# convert date string to date object
dt_start = make_dt(dateStart)
dt_end = make_dt(dateEnd)

pathDir = '.'

if __name__ == "__main__":

    for folder in os.listdir(pathDir):
        # only folders that match date format yyyy-mm-dd
        if re.match("[0-9]{4}-[0-9]{2}-[0-9]{2}", folder):
            # convert folder name to date object
            dt_folder = make_dt(folder)
            if (dt_folder <= dt_end) and (dt_folder >= dt_start):
                print "folder %s is between start [%s] and end [%s]" % (folder, dateStart, dateEnd)