我正在尝试将两个相同的文件拖放到不同数据帧中的python中,最终目标是比较新文件中添加的内容和旧文件中删除的内容。到目前为止,我的代码看起来像这样:
In[1] path = r'\\Documents\FileList'
files = os.listdir(path)
In[2] files_txt = [f for f in files if f[-3:] == 'txt']
In[3] for f in files_txt:
data = pd.read_excel(path + r'\\' + f)
df = df.append(data)
我还设置了一个变量,使其等于当前日期减去特定天数,我想用它来提取日期等于该变量的文件:
d7 = dt.datetime.today() - timedelta(7)
截至目前,我不确定如何执行此操作,因为文件名的第一部分始终保持不变,但最后会添加数字(例如,file_03232016,然后是file_03302016)。我想通过目录解析文件名的开头部分,如果它与我设置的日期参数匹配,则将其添加到数据框中。
编辑:我忘了添加有时我还需要查看系统日期创建的时间戳,因为文件名中的文本日期并不总是存在。
答案 0 :(得分:1)
使用strftime
将日期时间变量表示为具有所需格式的字符串,并使用glob
表示在目录中按文件掩码搜索文件:
import datetime as dt
import glob
fmask = r'\\Documents\FileList\*' + (dt.datetime.today() - dt.timedelta(7)).strftime('%m%d%Y') + '*.txt'
files_txt = glob.glob(fmask)
# concatenate all CSV/txt files into one data frame
df = pd.concat([pd.read_csv(f) for f in files_txt], ignore_index=True)
PS我想你在使用read_csv
文件时想要使用read_excel
而不是txt
,除非你真的有txt
扩展名的excel文件?
答案 1 :(得分:1)
以下是对原始代码的一些修改,以获取包含目标日期的文件列表。您需要使用strftime
。
import os
from datetime import timedelta
d7 = dt.datetime.today() - timedelta(7)
target_date_str = d7.strftime('_%m%d%Y')
files_txt = [f for f in files if f[-13:] == target_date_str + '.txt']
>>> target_date_str + '.txt'
'_03232016.txt'
data = []
for f in files_txt:
data.append(pd.read_excel(os.path.join(path, f))
df = pd.concat(data, ignore_index=True)