我在Python中有一个字符串:hello, my name is "Joe"
。当我尝试使用csv
模块进行书写时,我得到了"hello, my name is ""Joe"""
。我希望看到的是"hello, my name is "Joe""
。
在存在双引号的情况下,是否仍有CSV编写器不添加双引号的问题?
代码:
s = 'hello, my name is "Joe"'
with open(filename, 'w', newline='', encoding='utf-8') as f_out:
writer = csv.writer(f_out)
writer.writerow([s])
答案 0 :(得分:3)
答案 1 :(得分:3)
根据RFC 4180: “如果使用双引号将字段括起来,则必须在字段内部出现双引号,方法是在其前面加上另一个双引号。”
但是,如果您要根据自己的特定需求进行更改,请尝试禁用双引号,并且必须定义一个转义字符:
import csv
s = ['hello, my name is "Joe"']
with open(filename, 'w', newline='', encoding='utf-8') as f_out:
writer = csv.writer(f_out, doublequote=False, escapechar='\\')
writer.writerow(s)
输出文件如下:
"hello, my name is \"Joe\""
但是,我建议使用quotechar
的{{1}}参数来更改引号字符,就像@AndrejKesely在other answer中一样。
答案 2 :(得分:0)
两种解决方案:
您都可以使用quotechar
来更改引号字符,以便忽略字符串中的双引号。 csv.writer(f_out, quotechar="'")
将为您解决。
或者您可以将escapechar="\\"
与doublequote=False
一起设置。这会将反斜杠放在每个双引号之前,以将其转义到字符串中。 csv.writer(f_out, escapechar="\\", doublequote=False)
尝试这两种方法。我希望这能回答您的问题。
答案 3 :(得分:-2)
/foo/*[local-name() = 'bar']/*[local-name() = 'quux']