我编写了一个函数,用于在前七天读取具有特定通配符和路径的文件(例如此类文件)。
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天内的所有文件。
答案 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)