如何基于文件名时间戳筛选最新导出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
相关产品推荐
相关产品推荐

