使用csv.writer时为何出现额外反斜杠?如何消除?
CSV写入时逗号前出现反斜杠的原因及解决方法
代码示例
import csv rows = [["Line 5"], ["4 1.66 0 0 ! x1, x2, x3, x4"]] # opening the CSV file with open('testing.txt', 'w', newline='') as file: # writing the CSV file writer = csv.writer(file, quotechar='"', quoting=csv.QUOTE_NONE, escapechar='\\') writer.writerows(rows)
运行结果
Line 5 4 1.66 0 0 ! x1\, x2\, x3\, x4
疑问
为何x1、x2、x3后会出现这些反斜杠?如何去除它们?
原因分析
你设置了quoting=csv.QUOTE_NONE,这表示CSV写入器不会用引号包裹包含特殊字符的字段。而逗号是CSV格式的默认字段分隔符,当字段内容里出现逗号时,写入器会用你指定的escapechar='\\'来转义这个逗号,避免它被误判为字段分隔的标记,所以就出现了这些反斜杠。
解决方法
根据实际需求,有两种常用处理方式:
方式一:让写入器自动用引号包裹特殊字段
将quoting参数改为csv.QUOTE_NONNUMERIC(仅给非数字字段加引号)或csv.QUOTE_ALL(给所有字段加引号),这样写入器会用引号把包含逗号的字段包裹起来,无需转义逗号:import csv rows = [["Line 5"], ["4 1.66 0 0 ! x1, x2, x3, x4"]] with open('testing.txt', 'w', newline='') as file: writer = csv.writer(file, quotechar='"', quoting=csv.QUOTE_NONNUMERIC) writer.writerows(rows)运行后输出:
Line 5 "4 1.66 0 0 ! x1, x2, x3, x4"方式二:修改CSV的字段分隔符
如果你的数据里的逗号只是普通文本字符,不需要作为字段分隔符,可以指定一个数据中不存在的字符作为delimiter(比如制表符'\t'),这样写入器就不会把逗号当成分隔符来转义:import csv rows = [["Line 5"], ["4 1.66 0 0 ! x1, x2, x3, x4"]] with open('testing.txt', 'w', newline='') as file: writer = csv.writer(file, quotechar='"', quoting=csv.QUOTE_NONE, escapechar='\\', delimiter='\t') writer.writerows(rows)运行后输出:
Line 5 4 1.66 0 0 ! x1, x2, x3, x4
内容的提问来源于stack exchange,提问作者Estiivan
相关产品推荐
相关产品推荐

