Python使用csv.writer输出含单引号字符串的双引号格式问题
问题:Python csv.writer 处理含单引号字符串时双引号格式错乱
我用Python的csv.writer写CSV文件,想让字符串被双引号包裹,于是给writer设置了quotechar属性,但字符串包含单引号时格式就乱了。
代码示例:
list = [] list.append([1, "foo"]) list.append([2, "bar"]) list.append([3, "foo's bar"]) with open('list.csv', 'w') as f: writer = csv.writer(f, quotechar = "'") for row in list: row[1] = '\"' + row[1] + '\"' writer.writerow(row)
运行后生成的list.csv内容:
1,"foo" 2,"bar" 3,'"foo''s bar"'
我希望第三行显示为"foo's bar",没有多余单引号,该怎么正确给含单引号的字符串加双引号?
解决方案
你不需要手动给字符串拼接双引号,csv模块本身就有完善的引号处理逻辑,之前的问题是手动加引号+错误的quotechar设置导致的冲突。
正确做法:
- 把
quotechar设为双引号'"',这才是你想要的字段包裹字符 - 通过
quoting参数指定哪些字段需要加引号,比如csv.QUOTE_NONNUMERIC会给所有非数字字段自动加引号 - 移除手动拼接双引号的代码
修正后的代码:
import csv # 不要用list作为变量名,避免覆盖内置类型 data_list = [] data_list.append([1, "foo"]) data_list.append([2, "bar"]) data_list.append([3, "foo's bar"]) # 添加newline=''是csv模块官方推荐写法,避免Windows下出现多余空行 with open('list.csv', 'w', newline='') as f: # quotechar指定用双引号包裹字段,quoting=csv.QUOTE_NONNUMERIC给非数字字段加引号 writer = csv.writer(f, quotechar='"', quoting=csv.QUOTE_NONNUMERIC) writer.writerows(data_list)
生成的CSV内容:
1,"foo" 2,"bar" 3,"foo's bar"
参数说明:
quotechar='"':指定字段的包裹字符为双引号quoting=csv.QUOTE_NONNUMERIC:自动给所有非数字类型的字段添加双引号,完全匹配你的需求;如果需要给所有字段(包括数字)加引号,改用csv.QUOTE_ALLnewline='': 避免Windows系统下写入CSV时出现多余的空行,属于跨平台兼容细节
内容的提问来源于stack exchange,提问作者ambb
相关产品推荐
相关产品推荐

