如何将300个分属三类的文件合并为3个CSV文件?
修正方案:按文件类型分别合并导出独立CSV
嘿,我一眼就看出问题所在了——你当前的代码把所有类型的数据都塞进了同一个列表,而且最后只导出了循环结束时最后一个类型的文件,这才导致所有内容都混进了一个CSV里。咱们调整一下逻辑,让每个类型单独处理并导出,代码如下:
import os import glob import pandas as pd # 定义需要处理的三种文件类型标识 file_types = ['FFIEC CDR Call Bulk POR', 'FFIEC CDR Call Schedule CI', 'FFIEC CDR Call Schedule ENT'] source_path = "C:\\Users\\ryans\\OneDrive\\Desktop\\schemas\\" output_path = "C:\\Users\\ryans\\OneDrive\\Desktop\\" # 逐个处理每种文件类型 for current_type in file_types: # 直接筛选当前类型的所有txt文件 matching_files = glob.glob(os.path.join(source_path, f"*{current_type}*.txt")) type_specific_dfs = [] for file in matching_files: # 读取文件(注意skiprows=1要确保符合所有该类型文件的格式) df = pd.read_csv(file, delimiter='\t', skiprows=1) df['source_file'] = os.path.basename(file) # 记录源文件名,方便溯源 type_specific_dfs.append(df) # 只有找到对应文件时才合并导出,避免生成空文件 if type_specific_dfs: merged_df = pd.concat(type_specific_dfs, ignore_index=True, sort=True) # 用os.path.join拼接路径更安全,避免字符串拼接的路径问题 merged_df.to_csv(os.path.join(output_path, f"{current_type}.csv"), index=False) print(f"✅ 完成:{current_type} 类型共合并 {len(matching_files)} 个文件,已导出到指定路径") else: print(f"⚠️ 提示:未找到 {current_type} 类型的文件")
关键调整点说明:
- 按类型分治处理:不再用嵌套循环判断每个文件属于哪种类型,而是直接针对每个类型筛选对应的文件,逻辑更清晰,也避免了数据混装
- 类型独立存储:每种类型单独维护一个DataFrame列表,确保不同类型的数据不会交叉
- 即时导出:处理完一种类型就立即合并导出,最终会生成三个分别对应三种类型的CSV文件
- 容错处理:增加了空文件判断,避免没有对应类型文件时生成空CSV
- 路径安全:用
os.path.join拼接路径,比直接字符串相加更稳妥,能兼容不同操作系统的路径格式
原来代码的问题复盘:
- 你之前的
all_df把所有类型的DataFrame都合并到了一起,最后pd.concat得到的是一个包含所有数据的大表 - 最后一行的
x是循环结束后mylist的最后一个元素,所以仅导出了最后一个类型的文件,但内容却是所有类型的混合数据
内容的提问来源于stack exchange,提问作者ASH
相关产品推荐
相关产品推荐

