如何用Python合并多个同表头CSV文件?避免重复表头
合并多份同表头CSV并仅保留一份表头的Python实现
下面提供两种实用的实现方案,分别适配不同场景:
方法一:使用Python标准库csv模块(无第三方依赖)
适合不想额外安装库的场景,代码轻量且内存友好,处理大文件更稳妥:
import csv import os # 配置参数 output_file = "merged.csv" # 合并后的输出文件名 csv_dir = "./csv_files" # 存放待合并CSV的目录(替换为实际路径) # 获取目录下所有CSV文件 csv_files = [f for f in os.listdir(csv_dir) if f.endswith(".csv")] # 打开输出文件准备写入 with open(output_file, "w", newline="", encoding="utf-8") as out_f: writer = csv.writer(out_f) header_written = False # 标记是否已写入表头 for filename in csv_files: file_path = os.path.join(csv_dir, filename) with open(file_path, "r", encoding="utf-8") as in_f: reader = csv.reader(in_f) if not header_written: # 写入第一个文件的表头和所有内容 writer.writerows(reader) header_written = True else: # 跳过后续文件的表头,只写入内容行 next(reader) # 跳过第一行(表头) writer.writerows(reader)
方法二:使用pandas库(简洁高效)
如果已经安装pandas,这个方案代码更简洁,适合快速实现:
先安装pandas(若未安装):
pip install pandas
实现代码:
import pandas as pd from glob import glob # 匹配所有待合并的CSV文件(可调整规则,比如"csv_files/*.csv") csv_files = glob("*.csv") # 初始化合并后的DataFrame merged_df = pd.DataFrame() for idx, file in enumerate(csv_files): if idx == 0: # 第一个文件读取全部内容(包含表头) df = pd.read_csv(file) else: # 后续文件跳过表头,只读取数据行 df = pd.read_csv(file, header=0) merged_df = pd.concat([merged_df, df], ignore_index=True) # 保存合并后的CSV,不保留索引列 merged_df.to_csv("merged.csv", index=False, encoding="utf-8")
注意事项
- 确保所有待合并的CSV文件表头完全一致,否则会导致数据错位或列名不匹配
- 处理超大文件时,优先选择
csv模块方案,避免pandas加载全部数据到内存导致溢出 - 可根据需求调整文件匹配规则,比如只合并特定前缀的文件(如
glob("sales_*.csv"))
内容的提问来源于stack exchange,提问作者all.m
相关产品推荐
相关产品推荐

