使用csv.writer向CSV追加数据时部分字段被自动加双引号问题求助
问题根因
- 被自动添加双引号的两个字段
34,307.65、2,272.25本身包含逗号,Python的csv.writer默认使用逗号作为字段分隔符,为了避免字段内部的逗号被误识别为字段分割标记,模块会自动给包含分隔符的字段包裹双引号,这是符合CSV格式标准的正常行为,不是程序异常。 - 写入前打印看不到引号是因为引号是写入CSV文件时csv模块动态添加的,不会修改你传入的原始数据内容。
可选解决方案
方案1:移除字段内部的千位分隔符(最推荐)
价格字段里的逗号是千位分隔符,属于格式化显示用的内容,存储时可以先处理为纯数字格式,避免字段内出现逗号:
# 处理示例:对价格字段做格式化,移除千位逗号 def insert_data(self, data): processed_data = [] for item in data: # 判断是不是带千位分隔符的价格字符串,可按需调整判断逻辑 if isinstance(item, str) and ',' in item and '.' in item: item = item.replace(',', '') processed_data.append(item) with open ('tracker_file.csv', 'a') as csv_file: writer = csv.writer(csv_file) writer.writerow(processed_data)
该方案兼容性最好,后续读取CSV时不需要额外处理就能直接拿到数值类的价格数据。
方案2:修改CSV字段分隔符
如果需要保留字段内的逗号,可以更换分隔符(比如用制表符\t),避免和字段内容冲突:
with open ('tracker_file.csv', 'a') as csv_file: # 指定制表符作为分隔符 writer = csv.writer(csv_file, delimiter='\t') writer.writerow(data)
方案3:关闭自动引号逻辑
如果必须使用逗号作为分隔符、保留字段内逗号,同时不希望出现双引号,可以修改quoting参数关闭自动加引号的逻辑,注意必须同时指定转义字符:
import csv with open ('tracker_file.csv', 'a') as csv_file: writer = csv.writer(csv_file, quoting=csv.QUOTE_NONE, escapechar='\\') writer.writerow(data)
注意:该方案写入的CSV读取时也需要配套设置相同的转义参数,否则会出现字段拆分错误。
内容的提问来源于stack exchange,提问作者Harvey Jones
相关产品推荐
相关产品推荐

