如何用csv.writer写入含转义字符的字符串?解决换行失效问题
解决csv.writer写入含特殊字符字符串的报错与换行符处理问题
问题原因
默认情况下,csv.writer的quoting参数为csv.QUOTE_MINIMAL,仅在字段包含分隔符、引号时才添加引号包裹。当字段包含换行符\n时,若未启用合适的引号规则,csv模块无法正确识别换行符为字段内容的一部分;同时,字段中存在需要转义的特殊字符时,未设置escapechar会触发转义错误。
解决方案
通过同时配置escapechar和quoting参数,即可解决报错并正确保留换行符:
1. 选择合适的引号规则
常用的两种引号配置:
csv.QUOTE_ALL:所有字段都用引号包裹,确保任何特殊字符(包括换行符)都被正确识别为字段内容。csv.QUOTE_NONNUMERIC:仅非数字字段添加引号,适合数字与字符串混合的数据集。
2. 完整代码示例
import csv # 注意:Python中字面量反斜杠需用\\表示,所以\g应写成\\g problem_string = "this \n sentence % is \n problematic \\g" # 打开文件时指定newline='',避免额外空行 with open('output.csv', 'w', newline='', encoding='utf-8') as f: # 配置escapechar和quoting参数 writer = csv.writer(f, escapechar='\\', quoting=csv.QUOTE_ALL) writer.writerow([problem_string])
3. 参数说明
escapechar='\\':指定转义字符,用于处理字段中出现的引号、分隔符等需要转义的内容。quoting=csv.QUOTE_ALL:强制所有字段用引号包裹,换行符会被包含在引号内,csv读取时会将其识别为字段的一部分,而非行结束符。newline='':让csv模块自行处理行结束符,避免Windows系统下写入时出现多余空行。
效果验证
写入后的CSV文件中,目标字段会被双引号包裹,换行符保留在字段内,特殊字符也会被正确转义,读取时可完整还原原字符串内容。
内容的提问来源于stack exchange,提问作者DOMINi04
相关产品推荐
相关产品推荐

