You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从日期开头的目录加载最新CSV至Pandas DataFrame?

仅加载目录中最新月份的CSV文件到Pandas DataFrame

我的目录中有以下命名格式的CSV文件:

  • 2022-07-31_DATA_GVAX_ARPA_COMBINED.csv
  • 2022-08-31_DATA_GVAX_ARPA_COMBINED.csv
  • 2022-09-30_DATA_GVAX_ARPA_COMBINED.csv

每月还会新增同格式的文件,例如:

  • 2022-10-31_DATA_GVAX_ARPA_COMBINED.csv
  • 2022-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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 12:30:54