You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Python如何遍历CSV文件列表并合并无表头数据

合并多个CSV文件(不含表头数据)的解决方案

嘿,你已经搞定了最麻烦的一步——收集所有CSV文件的路径!接下来咱们就把这些文件里的数据(跳过表头)合并成一个新的CSV,我给你两种方法,你可以选适合自己的:


方法一:用Python标准库csv(无需额外安装)

这种方法用Python自带的模块,不需要装第三方库,适合不想折腾环境的情况:

首先导入需要的库:

import os
import csv

然后编写合并逻辑:

# 定义输出文件的路径,你可以改成自己想要的位置和文件名
output_file = "merged_gps_data.csv"
# 标记是否已经写入过表头,避免重复写入
header_written = False

# 打开输出文件准备写入
with open(output_file, 'w', newline='', encoding='utf-8') as out_csv:
    writer = csv.writer(out_csv)
    
    # 遍历每个CSV文件路径
    for file_path in file_list:
        # 打开当前CSV文件
        with open(file_path, 'r', encoding='utf-8') as in_csv:
            reader = csv.reader(in_csv)
            
            # 跳过当前文件的表头行,同时把表头存下来
            current_header = next(reader)
            
            # 只有第一个文件需要写入表头到输出文件
            if not header_written:
                writer.writerow(current_header)
                header_written = True
            
            # 把当前文件的所有数据行(跳过表头后的)写入输出文件
            for row in reader:
                writer.writerow(row)

代码说明:

  • newline='':解决Windows系统下写入CSV时出现多余空行的问题
  • encoding='utf-8':确保文件中的中文、特殊字符不会乱码,如果你的CSV是GBK编码,改成encoding='gbk'就行
  • next(reader):专门用来跳过每个文件的第一行(表头),同时获取表头内容,只在第一个文件时写入输出文件,保证合并后的CSV只有一份表头

方法二:用pandas(更简洁高效)

如果你经常处理数据,推荐用pandas,代码更短,处理大文件也更顺手。先确保你已经安装了pandas:

pip install pandas

然后用几行代码就能搞定:

import pandas as pd

# 读取所有CSV文件,自动跳过表头(header=0表示第一行是表头)
all_data_frames = [pd.read_csv(file_path, header=0) for file_path in file_list]

# 合并所有数据,重置行索引避免重复
merged_data = pd.concat(all_data_frames, ignore_index=True)

# 保存合并后的文件,index=False表示不写入行序号
merged_data.to_csv("merged_gps_data.csv", index=False, encoding='utf-8')

代码说明:

  • pd.read_csv(file_path, header=0):自动识别每个CSV的第一行为表头,读取后续内容为数据
  • pd.concat():把所有读取到的数据表合并成一个大表
  • ignore_index=True:合并后重新生成行号,避免不同文件的行号重复
  • to_csv(..., index=False):保存时不把行号写入CSV,保持文件整洁

注意事项:

  • 请确保所有CSV文件的表头结构完全一致,比如列名、列数都相同,不然合并后会出现列错位或者缺失的情况
  • 如果某个文件没有表头,或者表头格式不一样,你需要单独处理这个文件(比如手动指定表头)

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

火山引擎 最新活动