Retrieving a file from the date range of the current directory

This is my approximate path: 'c: \ Data \ 2015-08-01'

I am currently getting all files inside a specific (1) date, but my goal is to get files with a date range of a file folder. An example is to get from 2015-08-01 to 2015-08-05 "just like between a query in MySQL

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'

      

Difficult for me to loop to pull files for a date range eg. '2015-08-01' to '2015-08-05'

Any help and suggestion would help, thanks in advance.

Note that there is a folder after my dates and the text files are in the last one. and the text file contained in that folder is my point. so from my old code i used this: filefolder = date_folder + "\" + filefolder to get the text in only 1 date.

here's my examples of real path data:

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

      

and if I get the range from 2015-08-01 to 2015-08-01. this will be the output:

 \\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


source to share


3 answers


The module datetime

allows you to do arithmetic calculations, comparisons, and also convert them to or from strings relatively easily.

Here's how it can be used to accomplish what you are trying to accomplish (at least as per your last comments):



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

      

+1


source


Here's my approach: start with a separate year, month, day and create a date:



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

      

+2


source


The easiest way is to convert dates to dates. You can just compare them. See example below:

#!/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)

      

0


source







All Articles