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

新手求助:用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 07:03:42