Python正则表达式处理CSV:拆分合并列并移除行尾逗号
修复Tabula导出的CSV列缺失问题
我来帮你搞定这个CSV格式的麻烦事儿——Tabula导出时把本该分开的两列合并成了一个,还多了末尾的逗号,导致列数从目标的10列变成了9列。下面是一个靠谱的解决方案,用Python处理能完美保留带引号的特殊字段(比如包含逗号的公司名):
解决思路
- 用Python内置的
csv模块读取文件:专业的CSV解析器能自动识别带引号的字段,避免直接按逗号分割破坏数据 - 移除每行末尾的空元素:原数据末尾的逗号会被解析成空列,直接删掉就能解决格式混乱
- 拆分合并的列:定位到被合并的字段(示例中是第4列,对应索引3),按空格拆分成两部分后插回原位置,让列数从9变回10
代码实现
import csv # 替换成你的输入输出文件路径 input_file = "your_input.csv" output_file = "fixed_output.csv" with open(input_file, mode='r', newline='', encoding='utf-8') as infile, \ open(output_file, mode='w', newline='', encoding='utf-8') as outfile: csv_reader = csv.reader(infile) csv_writer = csv.writer(outfile) for row in csv_reader: # 去掉行末尾因多余逗号产生的空元素 if row and row[-1].strip() == "": row = row[:-1] # 处理9列的行(原数据是9列,需要拆成10列) if len(row) == 9: # 拆分第4列(索引3)为两部分,只按第一个空格拆分 merged_content = row[3] split_parts = merged_content.split(maxsplit=1) if len(split_parts) == 2: # 替换合并字段为拆分后的两个字段 row = row[:3] + split_parts + row[4:] # 写入修复后的行 csv_writer.writerow(row)
关键细节说明
maxsplit=1:确保只拆分第一个空格,就算后面的描述字段有空格也不会被误拆分- CSV模块的优势:自动处理带引号的复杂字段(比如
"AGANS & ELLIOTT, INC, A&E ELECTRIC"),不会把包含逗号的内容拆成多列 - 空元素处理:原数据每行末尾的逗号会被解析成空列,移除它就能保证每行都是标准的10列
把你的输入CSV路径替换到input_file,运行代码后就能得到符合要求的10列CSV啦!
内容的提问来源于stack exchange,提问作者veilupearl
相关产品推荐
相关产品推荐

