Python根据部分名称和文件时间戳读取文本文件

时间:2016-03-30 20:05:15

标签: python-2.7 pandas timestamp

我正在尝试将两个相同的文件拖放到不同数据帧中的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)。我想通过目录解析文件名的开头部分,如果它与我设置的日期参数匹配,则将其添加到数据框中。

编辑:我忘了添加有时我还需要查看系统日期创建的时间戳,因为文件名中的文本日期并不总是存在。

2 个答案:

答案 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)