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

Python写入含引号字符串到CSV时行分隔异常如何解决

问题根因

行解析异常来自csv.reader默认解析规则和输入内容的转义格式不匹配:

  • Python标准库csv模块默认采用双引号重复作为引号转义规则(即被双引号包裹的字段内,要写两个连续双引号""才会被识别为字段内容里的双引号),默认不会将反斜杠\识别为转义字符
  • 示例中第二行第一个字段末尾存在反斜杠转义引号的写法=\",reader无法识别这种转义逻辑,误判该字段的包裹双引号未闭合,会持续将后续所有行的内容都划入该字段,直到字符串末尾碰到引号才判定字段结束,最终出现行粘连、文件末尾多孤立引号的问题
  • 直接使用splitlines()手动拆分字符串后传入reader,遇到非标准换行格式时也可能出现行拆分错误,兼容性不足。
修复方法

初始化csv.reader时显式指定escapechar='\\',告知reader反斜杠为合法转义字符;同时用io.StringIO包装输入的CSV字符串,替代手动拆行的逻辑,自动适配不同换行格式。
修复后的可运行代码:

import io
import csv

a = """string1,1.0,1.0,1.0,1.654515119023E12,1.0,1.0,1.0,1.0,1.0,1.0,6.0,1.0
"string2;""=?KOI8-R?a?aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/aaaa=?=\"",1.0,1.0,1.0,1.654515151681E12,1.0,1.0,1.0,1.0,1.0,1.0,2.0,1.0
string3,1.0,1.0,1.0,1.654515072483E12,1.0,1.0,1.0,1.0,1.0,1.0,6.0,1.0
string4,1.0,1.0,1.0,1.654515072483E12,1.0,1.0,1.0,1.0,1.0,1.0,6.0,1.0
string5,1.0,1.0,1.0,1.654515072483E12,1.0,1.0,1.0,1.0,1.0,1.0,6.0,1.0
"""

with open("test.csv", "w", encoding='utf8', newline='') as csv_file:
    writer_csv = csv.writer(csv_file)
    # 包装字符串,指定转义字符
    cr = csv.reader(io.StringIO(a), escapechar='\\')
    # 直接批量写入所有行,无需手动转列表
    writer_csv.writerows(cr)

这里改用with上下文管理器操作文件,会自动处理文件关闭逻辑,避免文件资源泄漏。

运行上述代码后,生成的CSV文件会正确拆分5行内容,不会出现行粘连、孤立引号的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 06:03:21