Python中的CSV写入器会两次添加双引号

7

我已经编写了一个Python脚本,将href属性和标签附加到包含在CSV文件中的URL的字符串上。问题是结果不如预期。生成的HTML字符串多了一个双引号而不是单引号。有什么建议可以解决这个问题吗? 以下是代码片段:

InputFile = open('data1.csv', 'rb')
OutputFile = open('data3.csv', 'a+b')

CsvReader_InputFile = csv.reader(InputFile, delimiter=',', quotechar='\"')
CsvWriter_OutputFile = csv.writer(OutputFile, delimiter=',', quotechar='\"')

Row_InputFile = CsvReader_InputFile.next()
Row_InputFile[2] = "<a href=\"" + Row_InputFile[2] + "\">Link</a>"
CsvWriter_OutputFile.writerow(Row_InputFile)

输出:

"<a href=""http://www.google.com"">Link</a>"

期望输出:

"<a href="http://www.google.com">Link</a>"

2
Row_InputFile[2] 是从哪里来的?(我猜这是因为你在基线中加入了引号,并告诉 csv writer 去引用它。) - Morgan Thrapp
3个回答

8

这是正确的行为。在csv值内部,双引号被转义。

如果您想要输出而不进行转义,请尝试csv.QUOTE_NONE

csv.writer(OutputFile, delimiter=',', quotechar='\"', quoting=csv.QUOTE_NONE)

4
没错。当引号字符位于字符串内部时,您期望什么?它必须以某种方式进行转义,将其加倍是一种常见惯例。 - Mark Ransom

2

在尝试将JSON对象作为字符串存储在CSV列中时,我遇到了这个问题。我在一个由双引号填充的字符串周围加上了单引号。

我的数据行看起来像:

['foo', 'bar', '{"foo":"bar". "bar":"foo"}']

我做了这个,问题就解决了。

writer = csv.writer(csv_file, delimiter=',', quotechar="\'", quoting=csv.QUOTE_NONE)

1

对于那些遇到“Error: need to escape”错误的人:

尝试这样做:

writer = csv.writer(f, quoting=csv.QUOTE_NONE, delimiter='|', quotechar='',escapechar='\\')

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接