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

Python处理CSV文件:合并因回车拆分的行

处理CSV中错误换行的行合并问题

嘿,我懂你遇到的麻烦——CSV里有些行被意外的回车拆成了两半,导致csv.reader没法正确解析对吧?我来给你分享个实用的解决方案,分思路和代码实现两部分:

核心思路

问题的关键在于,这些被拆分的行本质是不完整的CSV行(比如引号没闭合、字段没结束),所以不能直接把原文件丢给csv.reader,得先做一步预处理:

  • 逐行读取文件内容,维护一个「待完成的行片段」
  • 判断当前拼接后的片段是否为完整CSV行:最可靠的判断方式是统计片段里的双引号数量——标准CSV中,字段内的引号会用双引号转义,所以完整行的引号总数一定是偶数
  • 确认是完整行后,输出拼接好的内容,再开始处理下一个片段

代码实现

下面是可直接复用的代码:

import csv

def fix_broken_csv_lines(file_path):
    current_fragment = []
    with open(file_path, encoding="utf-8") as input_file:
        for line in input_file:
            # 去掉行尾的回车换行,保留字段内的其他内容
            cleaned_line = line.rstrip('\r\n')
            current_fragment.append(cleaned_line)
            
            # 统计当前拼接内容的双引号总数
            total_quotes = ''.join(current_fragment).count('"')
            # 引号数为偶数时,说明这是一个完整的CSV行
            if total_quotes % 2 == 0:
                yield ','.join(current_fragment)
                current_fragment = []
        # 处理文件末尾可能遗留的未完成片段
        if current_fragment:
            yield ','.join(current_fragment)

# 使用示例
# 先修复行,再交给csv.reader解析
fixed_rows = fix_broken_csv_lines('/inputfile.csv')
reader = csv.reader(fixed_rows, delimiter=',', quotechar='"')

# 测试输出解析后的行
for row in reader:
    print(row)

补充说明

  • 这个方法优先处理引号未闭合导致的换行问题,这是CSV行拆分最常见的原因,比单纯判断行尾是否为逗号要可靠得多
  • 如果你的CSV没有带引号的字段,也可以调整判断逻辑(比如检查每行字段数是否符合预期),但引号判断的通用性更强
  • 函数用了生成器yield,不会一次性把整个文件读进内存,处理大文件也毫无压力

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 19:42:33