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
相关产品推荐
相关产品推荐

