如何从日期开头的目录加载最新CSV至Pandas DataFrame?
仅加载目录中最新月份的CSV文件到Pandas DataFrame
我的目录中有以下命名格式的CSV文件:
2022-07-31_DATA_GVAX_ARPA_COMBINED.csv2022-08-31_DATA_GVAX_ARPA_COMBINED.csv2022-09-30_DATA_GVAX_ARPA_COMBINED.csv
每月还会新增同格式的文件,例如:
2022-10-31_DATA_GVAX_ARPA_COMBINED.csv2022-11-30_DATA_GVAX_ARPA_COMBINED.csv
我希望仅将最新月份的.csv文件加载至Pandas DataFrame,而非所有文件。请问该如何实现(是否可使用glob)?
我曾见过用于前缀匹配的代码如下:
dir_files = r'/path/to/folder/*' dico={} for file in Path(dir_files).glob('DATA_GVAX_COMBINED_*.csv'): dico[file.stem.split('_')[-1]] = file max_date = max(dico)
当然可以用glob(或pathlib的glob方法)实现,针对你的文件名格式,核心思路是提取文件名中的日期部分,找到最大日期对应的文件后加载到DataFrame,以下是两种可行方案:
方案一:使用pathlib + glob(推荐)
利用pathlib的便捷性,直接提取文件名开头的日期字符串——由于你的日期格式是YYYY-MM-DD,字符串字典序和时间顺序完全一致,可直接比较大小。
from pathlib import Path import pandas as pd # 指定目标目录路径 folder_path = Path('/path/to/folder') # 匹配所有符合格式的CSV文件 csv_files = list(folder_path.glob('*_DATA_GVAX_ARPA_COMBINED.csv')) if not csv_files: raise FileNotFoundError("目录中未找到符合格式的CSV文件") # 按文件名开头的日期排序,取最新文件 latest_file = max(csv_files, key=lambda x: x.stem.split('_')[0]) # 加载至DataFrame df = pd.read_csv(latest_file)
方案二:基于你提供的代码修改
你的原始代码是提取后缀日期,只需调整日期提取逻辑,适配文件名开头的日期格式即可:
from pathlib import Path import pandas as pd dir_files = Path('/path/to/folder') dico = {} # 匹配正确的文件名格式 for file in dir_files.glob('*_DATA_GVAX_ARPA_COMBINED.csv'): # 提取文件名开头的日期部分(第一个下划线前的内容) date_str = file.stem.split('_')[0] dico[date_str] = file if not dico: raise FileNotFoundError("目录中未找到符合格式的CSV文件") max_date = max(dico) latest_file = dico[max_date] # 加载数据 df = pd.read_csv(latest_file)
补充说明
因为你的文件名日期采用标准的YYYY-MM-DD格式,字符串比较的结果和时间先后完全匹配,所以直接取最大的日期字符串对应的文件,就是最新月份的文件。即使日期是月末日期(如7月31日、8月31日),该逻辑依然适用。
内容的提问来源于stack exchange,提问作者Mazil_tov998
相关产品推荐
相关产品推荐

