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

如何基于文件名时间戳筛选最新导出CSV并合并为DataFrame

筛选含最新导出时间戳的CSV文件并合并

需求说明

你有一个包含多级子目录的文件夹,里面存放着带时间戳的CSV文件,需要仅选取同一文件前缀下导出时间戳最新的文件,合并成单个DataFrame。

比如给定以下文件(示例):

FileA_20230208_ExportedOn_20230202T0215Z
FileA_20230208_ExportedOn_20230208T0015Z
FileB_20230208_ExportedOn_20230205T0215Z
FileB_20230208_ExportedOn_20230208T2218Z
FileC_20230208_ExportedOn_20210208T0215Z
FileC_20230208_ExportedOn_20230201T0215Z
FileC_20230208_ExportedOn_20230208T2208Z
FileC_20230208_ExportedOn_20200207T0215Z
FileA_20230209_ExportedOn_20230202T1915Z
FileA_20230209_ExportedOn_20230202T0215Z

最终只需合并这4个最新的文件:

FileA_20230208_ExportedOn_20230208T0015Z
FileB_20230208_ExportedOn_20230208T2218Z
FileC_20230208_ExportedOn_20230208T2208Z
FileA_20230209_ExportedOn_20230202T1915Z

你已实现全量CSV合并的代码:

import pandas as pd

# 获取所有CSV文件路径
files = glob.glob('/**/*.csv', recursive=True)

# 合并所有CSV
df = pd.concat([pd.read_csv(fp).assign(file_name=Path(fp).name)
                for fp in files], ignore_index=True)

解决方案

我们需要先解析文件名,按**文件前缀(如FileA_20230208)**分组,每组保留导出时间戳最大的文件,再合并这些筛选后的文件。

完整代码实现

import pandas as pd
import glob
from pathlib import Path

# 1. 获取所有CSV文件路径
all_files = glob.glob('/**/*.csv', recursive=True)

# 2. 解析文件名,提取前缀和导出时间戳
file_info = []
for fp in all_files:
    file_name = Path(fp).name.replace('.csv', '')  # 去掉.csv后缀
    # 按下划线拆分文件名,提取前缀(前两部分)和导出时间戳(最后一部分)
    parts = file_name.split('_')
    file_prefix = '_'.join(parts[:2])  # 比如FileA_20230208
    export_timestamp = parts[-1]       # 比如20230208T0015Z
    file_info.append({
        'file_path': fp,
        'prefix': file_prefix,
        'export_time': export_timestamp
    })

# 3. 转成DataFrame,按前缀分组,保留每组中导出时间最新的文件
info_df = pd.DataFrame(file_info)
# 按前缀分组,取export_time最大的行(时间戳字符串可直接比较大小)
latest_files_df = info_df.loc[info_df.groupby('prefix')['export_time'].idxmax()]

# 4. 合并筛选后的最新文件
final_df = pd.concat(
    [pd.read_csv(fp).assign(file_name=Path(fp).name) 
     for fp in latest_files_df['file_path']], 
    ignore_index=True
)

关键说明

  • 文件名解析:通过split('_')拆分文件名,取前两部分作为分组前缀(比如FileA_20230208),最后一部分是导出时间戳。
  • 时间戳比较:导出时间戳的字符串格式(如20230208T0015Z)可以直接按字符串排序,最大的即为最新时间。
  • 分组筛选:用groupby('prefix')['export_time'].idxmax()获取每组中最新时间戳对应的文件行,再提取路径进行合并。

内容的提问来源于stack exchange,提问作者user53526356

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 06:27:43