我正在使用csv.writer在Python语言中编写一个CSV文件.我想在字符串两边插入双引号,所以我向编写器添加了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",没有任何额外的单报价.如何正确地将双引号应用于包含单引号的字符串?

推荐答案

您可以使用quoting参数来处理在非数字列两边加引号的问题.这也使您不必将双引号单独添加到一行中.

with open('list.csv', 'w') as f:
    writer = csv.writer(f, quoting=csv.QUOTE_NONNUMERIC)
    for row in list:
        writer.writerow(row)

这将写入所需的输出

1,"foo"
2,"bar"
3,"foo's bar"

Python相关问答推荐

Pandas或pyspark跨越列创建

不同数据类型的Python成员变量不会在具有相同优先级的不同线程中更新

使用itertools出现第n个子串

为什么我的代码会进入无限循环?

避免循环的最佳方法

绘制系列时如何反转轴?

从今天起的future 12个月内使用Python迭代

从管道将Python应用程序部署到Azure Web应用程序,不包括需求包

如何在BeautifulSoup中链接Find()方法并处理无?

在Python中处理大量CSV文件中的数据

Django mysql图标不适用于小 case

C#使用程序从Python中执行Exec文件

根据二元组列表在pandas中创建新列

Telethon加入私有频道

用NumPy优化a[i] = a[i-1]*b[i] + c[i]的迭代计算

移动条情节旁边的半小提琴情节在海运

如何使用Pandas DataFrame按日期和项目汇总计数作为列标题

从Windows Python脚本在WSL上运行Linux应用程序

使用BeautifulSoup抓取所有链接

处理具有多个独立头的CSV文件