如何清理CSV文件多余逗号并将指定区域合并为单列
处理超大CSV文件的列格式修正脚本
需求说明
要批量处理文件夹中总容量300GB的拆分CSV文件,修正不符合11列格式的行:前5列和后5列保持原样,仅将中间区域的多余逗号替换为空格并合并成单列。示例如下:
输入行:84,855,648857,8787548,R,mark,one 55, power,0000081,3434,59190000,defen,six,
输出行:84,855,648857,8787548,R,mark one 55 power,0000081,3434,59190000,defen,six,
解决方案
由于文件总容量极大,必须采用逐行读取的方式避免内存溢出,以下是Python实现脚本:
核心逻辑
- 遍历目标文件夹下所有CSV文件
- 逐行读取文件内容,拆分后提取固定列
- 合并中间区域的多余内容,替换逗号为空格
- 将处理后的行写入新文件(建议先备份原文件)
代码实现
import os def fix_csv_columns(input_dir, output_dir): # 创建输出目录(不存在则自动生成) os.makedirs(output_dir, exist_ok=True) for filename in os.listdir(input_dir): if not filename.endswith('.csv'): continue input_path = os.path.join(input_dir, filename) output_path = os.path.join(output_dir, filename) with open(input_path, 'r', encoding='utf-8') as infile, open(output_path, 'w', encoding='utf-8') as outfile: for line in infile: line = line.strip() if not line: outfile.write('\n') continue # 按逗号拆分所有字段 elements = line.split(',') # 仅处理字段数超过11的行 if len(elements) > 11: # 提取前5列、后5列 first_five = elements[:5] last_five = elements[-5:] # 提取中间区域并合并(逗号换空格) middle_part = elements[5:-5] merged_middle = ' '.join(middle_part).strip() # 拼接成符合要求的11列格式,保留原行末尾的逗号 fixed_line = ','.join(first_five + [merged_middle] + last_five) + ',' outfile.write(fixed_line + '\n') else: # 字段数符合要求的行直接保留 outfile.write(line + '\n') print(f"{filename} 处理完成") # 自定义路径使用示例 if __name__ == "__main__": INPUT_FOLDER = "./original_csvs" # 替换为你的输入文件夹路径 OUTPUT_FOLDER = "./fixed_csvs" # 替换为你的输出文件夹路径 fix_csv_columns(INPUT_FOLDER, OUTPUT_FOLDER)
关键注意点
- 内存控制:逐行处理不会加载整个文件,适配超大文件场景
- 编码兼容:若CSV使用非UTF-8编码(如GBK),请修改
open函数的encoding参数 - 数据安全:处理前务必备份原文件,避免异常导致数据丢失
- 性能优化:文件数量极多时可尝试多进程处理,但需注意磁盘IO瓶颈
- 边界处理:脚本默认保留字段数不足/等于11的行,可根据实际需求调整判断逻辑
内容的提问来源于stack exchange,提问作者Emerson Pedroso
相关产品推荐
相关产品推荐

