使用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}")
使用说明
- 将代码中的
./your_csv_folder替换为你存放原始CSV文件的目录路径。 - 运行代码后,规范后的CSV文件会保存在
./formatted_csvs目录下,每个文件会添加_formatted后缀以便区分。 - 如果你的CSV文件使用非UTF-8编码(如GBK),请将代码中的
encoding='utf-8'替换为对应的编码格式。
内容的提问来源于stack exchange,提问作者a_44
相关产品推荐
相关产品推荐

