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

Python正则表达式处理CSV:拆分合并列并移除行尾逗号

修复Tabula导出的CSV列缺失问题

我来帮你搞定这个CSV格式的麻烦事儿——Tabula导出时把本该分开的两列合并成了一个,还多了末尾的逗号,导致列数从目标的10列变成了9列。下面是一个靠谱的解决方案,用Python处理能完美保留带引号的特殊字段(比如包含逗号的公司名):

解决思路

  1. 用Python内置的csv模块读取文件:专业的CSV解析器能自动识别带引号的字段,避免直接按逗号分割破坏数据
  2. 移除每行末尾的空元素:原数据末尾的逗号会被解析成空列,直接删掉就能解决格式混乱
  3. 拆分合并的列:定位到被合并的字段(示例中是第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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 03:46:16