You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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_ALL
  • newline='': 避免Windows系统下写入CSV时出现多余的空行,属于跨平台兼容细节

内容的提问来源于stack exchange,提问作者ambb

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 18:55:16