关于pandas.read_csv()中doublequote=False解析引号字段的疑问
pandas中to_csv与read_csv的doublequote参数解析问题
问题场景
在使用pandas.DataFrame.to_csv()和pandas.read_csv()处理含引号的文本时,对doublequote参数的解析逻辑存在困惑。根据文档,该参数用于控制是否将字段内连续的两个quotechar解析为单个quotechar。
测试示例如下:
初始数据
text = 'simple,"simple"' df = pd.DataFrame([{'col': text}])
to_csv生成的CSV内容
使用默认doublequote=True配置生成的文件内容:
col "simple,""simple"""
读取结果差异
- 用默认
doublequote=True读取可还原原数据; - 用
pd.read_csv('test.csv', doublequote=False, quotechar='"')读取时,得到:
col 0 simple,"simple"""
而预期结果是:
col 0 simple,""simple""
解析逻辑说明
to_csv的doublequote=True行为
当doublequote=True时,to_csv会将字段内的每个quotechar(此处为")转义为两个连续的",同时用"包裹整个字段。原文本simple,"simple"包含一个",转义后变为simple,""simple,再加上首尾的包裹",最终生成"simple,""simple"""(末尾的三个"是转义后的""加包裹的")。
read_csv的doublequote=False行为
当doublequote=False且未指定escapechar时,解析器不会将连续的""解析为单个",逻辑如下:
- 第一个
"作为字段起始标记; - 读取字段内容时,遇到的
"若后面不是分隔符或行尾,会被当作普通字符保留; - 遇到的
"若后面紧跟分隔符或行尾,会被当作字段结束标记,不会被包含在字段内容中。
对应到生成的行"simple,""simple""":
- 起始
"开启字段; - 读取到
simple,后的第一个",后面是另一个"(非分隔符/行尾),被保留; - 第二个
"后面是s,被保留; - 读取到
simple后的连续三个"中,最后一个"紧跟行尾,被当作字段结束标记,因此仅前面两个"被保留; - 最终字段内容为
simple,"simple""",与预期不符。
结论
若要保留to_csv生成的连续",需在read_csv时同时设置doublequote=True(还原转义逻辑),或在to_csv时指定escapechar并在read_csv时对应设置,确保解析逻辑匹配。
内容的提问来源于stack exchange,提问作者KAGS
相关产品推荐
相关产品推荐

