如何移除CSV生成流程中List_final内key_values的双引号?
解决CSV导出字段被双引号包裹的问题
我来帮你拆解并解决这个问题,核心其实是两个小细节没处理到位:
问题根源分析
replace操作未生效:Python里的字符串是不可变类型,你写的str(key_values).replace('"', '')只是生成了一个移除引号的新字符串,但没有把这个结果赋值回变量,所以原key_values完全没变化。- CSV Writer的自动引号逻辑:当你的字段内容里包含分隔符(比如示例里的逗号),
csv.writer默认会用你设置的quotechar(双引号)把整个字段包裹起来,避免CSV解析时把字段里的逗号当成列分隔符。
方案1:完全移除所有引号(需注意CSV规范问题)
如果你确定要彻底去掉所有双引号,哪怕字段里有逗号,需要同时处理字符串替换和Writer的引号行为:
import csv # 假设list_final是你的全局变量 list_final = [] for entry, value_all in csv_data.iteritems(): list_temp = [entry] key_values = ','.join(value_all.itervalues()) # 关键:把移除引号后的结果赋值给变量 cleaned_key_values = key_values.replace('"', '') list_temp.append(cleaned_key_values) list_final.append(list_temp) with open('test.csv', 'w') as fp: # 设置quoting=csv.QUOTE_NONE,禁止自动添加引号 writer = csv.writer(fp, delimiter=',', quotechar='"', quoting=csv.QUOTE_NONE) writer.writerows(list_final)
⚠️ 注意:这种写法会让字段里的逗号被当成列分隔符,导致CSV文件的列数混乱,除非你确认字段里的逗号不需要保留为单个字段的内容。
方案2:移除原始引号,保留合规的自动引号(推荐)
如果只是想去掉key_values自带的双引号,同时保留CSV Writer为包含逗号的字段添加的规范引号(这是符合CSV标准的写法,避免解析错误),只需要修复字符串替换的赋值问题即可:
import csv list_final = [] for entry, value_all in csv_data.iteritems(): list_temp = [entry] key_values = ','.join(value_all.itervalues()) # 赋值替换后的结果,覆盖原变量 key_values = key_values.replace('"', '') list_temp.append(key_values) list_final.append(list_temp) with open('test.csv', 'w') as fp: # 保持默认的QUOTE_MINIMAL逻辑:仅当字段包含分隔符/换行符时添加引号 writer = csv.writer(fp, delimiter=',', quotechar='"') writer.writerows(list_final)
这个方案的输出会是:
2018-01-27T08:00:00.000Z,"11,14,16,65,234,7,7,574" 2018-01-28T08:00:00.000Z,"1095,141,1646,638,2360,6,6,576"
这里的双引号是CSV Writer为了保证文件可正确解析自动添加的,而非原始数据自带的,属于规范的CSV格式。
内容的提问来源于stack exchange,提问作者Vinay
相关产品推荐
相关产品推荐

