如何不使用pandas等数据框工具,用Python将多个同结构CSV合并为总表
不依赖数据框类工具的CSV合并方案
所有方案的前提是所有待合并CSV的表头(列名、列顺序)完全一致,如果存在列缺失/顺序不同的情况,需要先对齐结构再合并。
方案1:命令行快速合并(适合无内嵌特殊格式的小文件)
该方案操作最快,仅适合字段内无换行、无特殊转义字符的标准CSV:
- 类Unix系统(Linux/macOS):
- 提取首个文件的表头写入结果文件:
head -n 1 第一个文件.csv > master.csv - 追加所有文件的非表头内容:
tail -n +2 *.csv >> master.csv
- 提取首个文件的表头写入结果文件:
- Windows CMD环境:
直接运行单行命令自动处理表头:set "first=1" & for %f in (*.csv) do @if defined first (type "%f" > master.csv & set "first=") else (more +1 "%f" >> master.csv) - Windows PowerShell环境:
# 写入表头 Get-ChildItem *.csv | Select-Object -First 1 | Get-Content -TotalCount 1 | Out-File master.csv -Encoding utf8 # 追加所有数据行 Get-ChildItem *.csv | ForEach-Object { Get-Content $_ | Select-Object -Skip 1 } | Out-File master.csv -Append -Encoding utf8
方案2:Python标准库实现(兼容所有正规CSV格式,通用可靠)
用Python自带的csv模块即可实现,完全不需要安装第三方依赖,支持处理带字段内嵌换行、转义引号、自定义分隔符的复杂CSV:
import csv import os # 按需修改配置参数 csv_dir = "./待合并csv存放目录" # 替换为你的CSV文件夹路径 output_path = "./master.csv" csv_encoding = "utf-8" # 如果你的CSV是GBK编码,修改为"gbk"即可 csv_files = [f for f in os.listdir(csv_dir) if f.lower().endswith(".csv")] if not csv_files: raise ValueError("指定目录下未找到CSV文件") with open(output_path, "w", newline="", encoding=csv_encoding) as out_f: writer = None for filename in csv_files: file_full_path = os.path.join(csv_dir, filename) with open(file_full_path, "r", newline="", encoding=csv_encoding) as in_f: reader = csv.reader(in_f) # 第一个文件写入表头 if writer is None: headers = next(reader) writer = csv.writer(out_f) writer.writerow(headers) else: # 跳过其余文件的表头 next(reader) # 写入当前文件所有数据行 for row in reader: writer.writerow(row)
方案3:零代码工具实现
- 如果你安装了Excel,可以用Power Query可视化合并:点击「数据」选项卡 → 获取数据 → 从文件 → 从文件夹 → 选中CSV存放目录 → 选择「合并并加载」即可自动完成合并。
- 如果可以安装轻量工具,
csvkit的csvstack命令也可以快速实现:直接运行csvstack *.csv > master.csv即可自动处理表头合并。
内容的提问来源于stack exchange,提问作者RohitM
相关产品推荐
相关产品推荐

