新手求助:用Python合并多Zip文件中同表头CSV为单个文件
你的代码核心逻辑完全可行!
这段代码的思路没问题,能实现你要的「合并所有Zip里的CSV到单个大文件」的需求,核心流程完全正确:
- 遍历目标文件夹里的所有Zip文件
- 逐个打开Zip,读取里面的CSV文件到DataFrame
- 把所有DataFrame合并后导出为单个CSV
不过作为新手,给你补充几个实用的优化点和注意事项,避免踩坑:
必做的基础调整
- 替换路径:一定要把代码里的
"path_to_folder_containing_zip_files"换成你实际的文件夹路径,比如Windows系统写成"C:\\你的文件夹路径",Mac/Linux写成"/Users/你的用户名/文件夹路径" - 编码处理:如果CSV里有中文或者特殊字符,读取时可能乱码,建议给
pd.read_csv加上encoding参数,比如pd.read_csv(csv_file, encoding='utf-8'),如果还是乱码可以试试encoding='gbk'
优化建议(可选)
1. 内存友好的写法(大数据量必备)
如果你的CSV总数据量很大,把所有DataFrame存在列表里会占用大量内存,改成逐文件追加到输出CSV的方式更省内存:
import os import pandas as pd import zipfile folder_path = "替换成你的文件夹路径" output_file = "combined_data.csv" # 标记是否是第一次写入(用来写入表头) first_write = True for file_name in os.listdir(folder_path): if file_name.endswith('.zip'): print(f"正在处理Zip文件:{file_name}") with zipfile.ZipFile(os.path.join(folder_path, file_name), 'r') as zip_ref: for csv_file_name in zip_ref.namelist(): if csv_file_name.endswith('.csv'): print(f" 读取CSV:{csv_file_name}") with zip_ref.open(csv_file_name) as csv_file: df = pd.read_csv(csv_file, encoding='utf-8') # 第一次写入时保留表头,之后追加时跳过表头 df.to_csv(output_file, mode='a', index=False, header=first_write) first_write = False print("合并完成!")
2. 更精准的文件名过滤
如果Zip里可能混入其他无关CSV,可以用正则表达式匹配你提到的命名规则(yyyymmdddamasp.csv),先导入re模块,然后把判断条件改成:
import re # ... 其他代码 ... if re.match(r'\d{8}amasp\.csv$', csv_file_name):
这样只会处理符合命名规则的CSV文件,避免误读。
3. 进度提示
加几个print语句(像上面优化代码里那样),能让你清楚看到脚本运行到哪一步,不会以为程序卡死。
内容的提问来源于stack exchange,提问作者atlanta1996
相关产品推荐
相关产品推荐

