为什么这段代码会引发csv.Error?

时间:2014-04-25 14:48:13

标签: python csv

我正在尝试使用Python的内置csv模块写出CSV。

import csv
import sys
writer = csv.writer(sys.stdout, delimiter="|", quoting=csv.QUOTE_NONE)
writer.writerow(['"foo', "bar"])

我期望的输出是:

"foo|bar

然而,我明白了:

Error: need to escape, but no escapechar set

documentation说:

  

当输出数据中出现当前分隔符时,它前面是当前的escapechar字符。如果未设置escapechar,则在遇到任何需要转义的字符时,编写器将引发错误。

现在,分隔符('|',管道符)不会出现在数据中的任何位置。为什么CSV编写器试图逃避某些事情?

1 个答案:

答案 0 :(得分:12)

设置quoting=csv.QUOTE_NONE是不够的;您还需要将quotechar设置为空字符串:

>>> import sys
>>> import csv
>>> writer = csv.writer(sys.stdout, delimiter="|", quoting=csv.QUOTE_NONE, quotechar='')
>>> writer.writerow(['"foo', "bar"])
"foo|bar

否则,csv.writer()会尝试转义任何现有的quotechar字符,但需要为此设置csv.escapechar