Python CSV文件筛选与合并需求:每日指定版本文件提取求助
解决方案:提取指定CSV文件并合并为DataFrame
以下是实现需求的具体步骤和代码:
步骤说明
- 遍历目标目录,筛选出
Account_History和Milestone两类CSV文件 - 按日期和文件类别对文件分组
- 对每组文件,优先选择文件名以
_1500_revision1.csv结尾的文件;若不存在,则选择以_1500.csv结尾的文件 - 读取所有选中文件,用
pandas.concat合并为单个DataFrame
完整代码
import os import pandas as pd from collections import defaultdict # 替换为你的实际目录路径 target_dir = "/path/to/your/csv/folder" # 按(日期, 文件类别)分组存储文件路径 file_groups = defaultdict(list) # 遍历目录筛选目标文件 for filename in os.listdir(target_dir): if filename.endswith(".csv") and ("Account_History" in filename or "Milestone" in filename): # 确定文件类别 file_type = "Account_History" if "Account_History" in filename else "Milestone" # 提取日期:假设文件名格式为「类别_日期_时间后缀.csv」,按下划线分割取第2位为日期(可根据实际格式调整索引) parts = filename.split("_") if len(parts) >= 3: date_str = parts[1] file_groups[(date_str, file_type)].append(os.path.join(target_dir, filename)) # 筛选最终要读取的文件 selected_files = [] for (date, file_type), files in file_groups.items(): # 优先找修订版 revision_file = next((f for f in files if "_1500_revision1.csv" in f), None) if revision_file: selected_files.append(revision_file) print(f"选中 {date} {file_type} 修订版: {os.path.basename(revision_file)}") else: # 找原始1500版本 original_file = next((f for f in files if "_1500.csv" in f), None) if original_file: selected_files.append(original_file) print(f"选中 {date} {file_type} 原始版: {os.path.basename(original_file)}") else: print(f"警告:{date} {file_type} 未找到符合条件的文件") # 合并文件为DataFrame if selected_files: dfs = [pd.read_csv(file) for file in selected_files] combined_df = pd.concat(dfs, ignore_index=True) print(f"合并完成,总记录数:{len(combined_df)}") # 可按需保存合并结果 # combined_df.to_csv("combined_data.csv", index=False) else: print("未找到任何符合条件的文件")
关键提示
- 文件名适配:如果你的文件名日期位置和示例不同,需要调整
parts[1]的索引值,确保能正确提取日期 - 规则调整:后续若要修改文件优先级规则,只需调整筛选文件的条件判断逻辑即可
- 异常处理:代码加入了未找到文件的警告,避免程序直接崩溃
内容的提问来源于stack exchange,提问作者Pleased_Samurai
相关产品推荐
相关产品推荐

