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

使用Python将重复列名的CSV转换为规范列结构CSV

批量处理重复列名CSV文件的通用方案

需求说明

你有上百个CSV文件,每个文件仅两行:第一行是重复的列名(如Red、Green、Orange、Purple重复多次),第二行是对应的数据。需要将这些文件转换为规范结构:列名为唯一的Red、Green、Orange、Purple,每行对应一组重复列的对应数据。

解决方案1:纯Python标准库实现(无需额外安装依赖)

以下代码会自动遍历指定目录下的所有CSV文件,自动识别每个文件的唯一列名,拆分数据并生成规范CSV。

import os
import csv

def process_single_csv(input_path, output_path):
    # 读取原CSV文件
    with open(input_path, 'r', newline='', encoding='utf-8') as infile:
        reader = csv.reader(infile)
        # 获取重复的列名行
        repeated_columns = next(reader)
        # 提取唯一列名(保留首次出现顺序)
        unique_columns = []
        seen_columns = set()
        for col in repeated_columns:
            if col not in seen_columns:
                seen_columns.add(col)
                unique_columns.append(col)
        group_length = len(unique_columns)
        # 获取数据行并按组拆分
        data_row = next(reader)
        grouped_data = [data_row[i:i+group_length] for i in range(0, len(data_row), group_length)]
    
    # 写入规范CSV文件
    with open(output_path, 'w', newline='', encoding='utf-8') as outfile:
        writer = csv.writer(outfile)
        writer.writerow(unique_columns)
        writer.writerows(grouped_data)

# 配置目录路径
input_directory = "./your_csv_folder"  # 替换为你的CSV文件所在目录
output_directory = "./formatted_csvs"

# 创建输出目录(不存在则自动创建)
os.makedirs(output_directory, exist_ok=True)

# 批量处理所有CSV文件
for filename in os.listdir(input_directory):
    if filename.lower().endswith('.csv'):
        input_file_path = os.path.join(input_directory, filename)
        output_file_name = f"{os.path.splitext(filename)[0]}_formatted.csv"
        output_file_path = os.path.join(output_directory, output_file_name)
        process_single_csv(input_file_path, output_file_path)
        print(f"已处理:{filename} → {output_file_name}")

解决方案2:使用Pandas实现(代码更简洁)

如果你的环境已安装Pandas,可使用以下更简洁的代码:

import pandas as pd
import os

# 配置目录路径
input_directory = "./your_csv_folder"
output_directory = "./formatted_csvs"

os.makedirs(output_directory, exist_ok=True)

# 批量处理
for filename in os.listdir(input_directory):
    if filename.lower().endswith('.csv'):
        input_path = os.path.join(input_directory, filename)
        # 读取CSV的两行数据
        raw_data = pd.read_csv(input_path, header=None)
        # 提取唯一列名
        unique_columns = list(dict.fromkeys(raw_data.iloc[0].values))
        group_length = len(unique_columns)
        # 拆分数据并生成新DataFrame
        formatted_data = raw_data.iloc[1].values.reshape(-1, group_length)
        formatted_df = pd.DataFrame(formatted_data, columns=unique_columns)
        # 保存文件
        output_path = os.path.join(output_directory, f"{os.path.splitext(filename)[0]}_formatted.csv")
        formatted_df.to_csv(output_path, index=False)
        print(f"已处理:{filename}")

使用说明

  1. 将代码中的./your_csv_folder替换为你存放原始CSV文件的目录路径。
  2. 运行代码后,规范后的CSV文件会保存在./formatted_csvs目录下,每个文件会添加_formatted后缀以便区分。
  3. 如果你的CSV文件使用非UTF-8编码(如GBK),请将代码中的encoding='utf-8'替换为对应的编码格式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 13:01:05