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

Python3无需Pandas实现多CSV文件按列合并是否可行?

不借助Pandas实现多CSV文件纵向合并

当然可以用Python标准库实现这个需求,完全不需要依赖Pandas。先明确你的场景:你需要将多个CSV文件纵向拼接(按列合并),每行保留对应的源文件名,同时处理不同文件表头顺序不一致的情况(比如你示例里df1和df2的列顺序不同)。

你已通过Pandas实现该功能,对应的中文版本代码如下:

import os
import pandas as pd # 需先安装:$ pip install pandas
import time

def cls():
    os.system('cls' if os.name=='nt' else 'clear')
cls()

today = time.strftime("%y%m%d")
fldpath = 'C:/tmp2/test/'
filepath = fldpath + today + "_merged.csv"

print(os.listdir(fldpath))
print("请输入文件名开头字符")
fmask = input()
file_list = [fldpath + f for f in os.listdir(fldpath) if f.startswith(fmask)]
csv_list = []
for file in sorted(file_list):
    # 给每个数据框添加源文件名列
    csv_list.append(pd.read_csv(file).assign(File_Name = os.path.basename(file)))

# 纵向拼接所有数据框
csv_merged = pd.concat(csv_list, ignore_index=True)
csv_merged.to_csv(filepath, index=False)

纯Python标准库实现方案

使用Python内置的csv模块就能完成,核心是用DictReader处理表头映射,解决列顺序不一致的问题,代码如下:

import os
import time
import csv

def cls():
    os.system('cls' if os.name=='nt' else 'clear')
cls()

today = time.strftime("%y%m%d")
fldpath = 'C:/tmp2/test/'
filepath = fldpath + today + "_merged.csv"

print(os.listdir(fldpath))
print("请输入文件名开头字符")
fmask = input()
# 按顺序获取符合条件的文件列表
file_list = sorted([fldpath + f for f in os.listdir(fldpath) if f.startswith(fmask)])

# 第一步:收集所有文件的列名,确定合并后的完整表头
all_columns = set()
for file in file_list:
    with open(file, 'r', newline='', encoding='utf-8') as f:
        reader = csv.DictReader(f)
        all_columns.update(reader.fieldnames)

# 确定合并后的表头:以第一个文件的表头为基础,补充其他列,最后添加文件名列
merged_columns = []
if file_list:
    with open(file_list[0], 'r', newline='', encoding='utf-8') as f:
        merged_columns = csv.DictReader(f).fieldnames.copy()
    # 补充其他文件特有的列
    for col in all_columns:
        if col not in merged_columns:
            merged_columns.append(col)
merged_columns.append('File_Name')

# 第二步:读取每个文件并写入合并结果
with open(filepath, 'w', newline='', encoding='utf-8') as out_file:
    writer = csv.DictWriter(out_file, fieldnames=merged_columns)
    writer.writeheader()
    
    for file in file_list:
        file_name = os.path.basename(file)
        with open(file, 'r', newline='', encoding='utf-8') as in_file:
            reader = csv.DictReader(in_file)
            for row in reader:
                # 添加源文件名
                row['File_Name'] = file_name
                # 给缺失的列补空值,保证结构一致
                for col in merged_columns:
                    if col not in row:
                        row[col] = ''
                writer.writerow(row)

print(f"合并完成,结果已保存到:{filepath}")

代码说明

  • csv.DictReader会把每行数据转换成字典,键是表头列名,自动处理不同文件列顺序不一致的问题
  • 先收集所有文件的列名,确保合并后的文件不会丢失任何列
  • 对每个行数据补充缺失列的空值,保证输出的CSV每行结构统一
  • 完全依赖Python标准库,不需要安装任何第三方包

内容的提问来源于stack exchange,提问作者Peter Asp

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 05:40:52