在Python中阅读前7天的csv

时间:2018-04-16 09:04:58

标签: python pandas csv

我编写了一个函数,用于在前七天读取具有特定通配符和路径的文件(例如此类文件)。

def i_get_last_week_file(self, par_path, par_file_wildcard, par_datetime):
    proc_datetime = par_datetime - timedelta(weeks=1)
    logger.info('Processing time: %s', str(proc_datetime))
    # file_list = []
    while proc_datetime <= par_datetime:
        sdate = proc_datetime.strftime('%Y_%m_%d-%H')
        for p_file in os.listdir(par_path):
            if fnmatch.fnmatch(p_file, par_file_wildcard + sdate + '*.csv'):
                self.files_list.append(p_file)
        break
    return self.files_list

def get_csv_from_local_weekly(self, par_path, par_wildcard_name, par_date=None, par_time=None):
    if par_date is None:
        par_date = self.file_date
    if par_time is None:
        par_time = self.file_time
    end_datetime = datetime.combine(par_date, par_time)
    a = self.i_get_last_day_file(par_path, par_wildcard_name, end_datetime)
    for i in a:
        try:
            df = pd.read_csv(par_path+''+i, index_col=None, header=0, delimiter=';')
            self.pandas_list.append(df)
        except Exception:
    frame = pd.concat(self.pandas_list)
    self.files_list = []
    self.pandas_list = []
    return frame

问题是,只读取七天之前的文件,但我需要收集今天前7天内的所有文件。

1 个答案:

答案 0 :(得分:1)

你需要创建一个7天的范围,这是一种方法:

import datetime
import re

td = datetime.datetime.today()

lastWeek = [(td - datetime.timedelta(i)).strftime('%Y_%m_%d-%H') for i in range(7)]

for p_file in os.listdir(par_path):
    dateSearch = re.search('\d{4}_\d{2}_\d{2}-\d{2}', pfile)
    if dateSearch:
        dateFound = dateSearch.group(0)
        if dateFound in lastWeek:
            ...

当然,您可以将td更改为日期变量,我只是将其用于测试。

此外,您的proc_datetime似乎没有在while循环内增加,如果您引入增量 - 您将不需要break

while proc_datetime <= par_datetime:
    sdate = proc_datetime.strftime('%Y_%m_%d-%H')
        for p_file in os.listdir(par_path):
            if fnmatch.fnmatch(p_file, par_file_wildcard + sdate + '*.csv'):
                self.files_list.append(p_file)
    proc_dateimte += datetime.timedelta(days=1)