熊猫将最新日期文件夹/ CSV文件加载到数据框中

时间:2020-09-03 20:39:28

标签: python pandas

我有一个zip文件,其中包含多个带日期的文件夹,在每个文件夹中,我都有一个datetamp.txt,其中包含日期和多个csv文件。

例如:

在Archives.zip中: \文件夹1 \ Folder2

在每个文件夹中:

DATESTAMP.txt

a.csv

b.csv

因此,我从上游放下了这个zip文件,其中包含多天的数据,日期信息包含在datestamp.txt文件中(只是一个日期戳,如20200903),如何处理最新的csv日期文件? (Folder1 / datestamp.txt:20200903,Folder2 / datestamp.txt:20200904,所以我只想拥有Folder2的csv文件)

我试图先从txt文件中读取日期并对它们进行排序。

from zipfile import ZipFile

zip_file = ZipFile('data\Archives.zip')

timestamp={text_file.filename: pd.read_csv(zip_file.open(text_file.filename),header=None)
       for text_file in zip_file.infolist() if text_file.filename.endswith('.txt')}

dfs = {text_file.filename: pd.read_csv(zip_file.open(text_file.filename))
       for text_file in zip_file.infolist() if text_file.filename.endswith('.csv')}

有没有一种方法可以直接从datestamp.txt获取日期,并且只读取最新的a.csv和b.csv?

谢谢

1 个答案:

答案 0 :(得分:1)

这里是查找最新日期和相应文件夹的方法。我使用defaultdict来显示是否有多个具有最新日期的文件夹。

from collections import defaultdict

# create test data
metadata = [
    'Folder1/datestamp.txt: 20200903', # Sept 3
    'Folder2/datestamp.txt: 20200904',
    'Folder2/datestamp.txt: 20200903', # Sept 3 also (impossible?)
     ]

# initial value is empty list; just append without checking first
latest = defaultdict(list)

for m in metadata:
    folder = m.split('/', 1)[0]
    datestamp = m.rsplit(' ', 1)[-1]
    latest[datestamp].append(folder)
    
print('max date  :', max(latest))
print('folder(s) :', latest[max(latest)])

max date  : 20200904
folder(s) : ['Folder2']