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

使用Python csv模块解析含引号内换行符与转义双引号的CSV字符串问题

解决Python csv模块解析含引号内换行和转义双引号的CSV字符串问题

我完全懂你遇到的矛盾——既要正确识别字段内的换行符,又要支持用双引号转义的字段内双引号,之前的配置问题出在对lineterminator和escapechar参数的误用上,下面给你梳理清楚并给出可行的解决方案:

核心问题拆解

  1. lineterminator参数用错了场景:这个参数是给csv.writer设计的,用来指定输出时的行终止符,csv.reader根本不会用它来识别输入的记录分隔符。你手动设置lineterminator='\n'反而干扰了reader的自动解析逻辑,导致它把整个字符串当成了单条记录。
  2. escapechar配置不符合你的CSV规范:你的CSV用""表示字段内的单个",这是CSV标准的默认转义方式,不需要设置escapechar——这个参数是用来指定用其他字符(比如反斜杠\)转义双引号的场景,设置它反而会让模块无法正确解析""的转义逻辑。

正确的解析代码示例

import csv
from io import StringIO

# 你的示例CSV字符串(注意记录之间用\n分隔)
result = '"value1";"value2";"value3\nstillvalue3 a ""quote"" inside the quote"\n"value4";"value5";"value6"'

# 正确的reader配置
csvreader = csv.reader(
    StringIO(result),
    quotechar='"',
    delimiter=';',
    quoting=csv.QUOTE_ALL  # 明确告知模块所有字段都被引号包裹,可选但能提升解析准确性
)

# 遍历查看解析结果
for row in csvreader:
    print("解析后的行:", row)
    print("第三个字段原始内容:", repr(row[2]))  # 用repr查看字符串的原始格式

解析结果说明

运行这段代码后,你会得到两条完整的正确记录:

  • 第一条记录的第三个字段会完整保留换行符,并且把""解析为单个",repr(row[2])会输出:'value3\nstillvalue3 a "quote" inside the quote'
  • 第二条记录会被正确识别为独立的行,不会和第一条混淆

关键配置总结

  • 绝对不要给csv.reader设置lineterminator参数,它会自动处理输入中的各种换行符(包括记录分隔的\n和引号内的换行符)
  • 当CSV用""转义字段内双引号时,不要设置escapechar,依赖模块默认的引号转义逻辑即可
  • 根据你的CSV格式,正确设置delimiter(这里是;)和quotechar(这里是"),如果所有字段都被引号包裹,加上quoting=csv.QUOTE_ALL能让解析更可靠

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 09:49:07