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

8 投票
1 回答
7900 浏览
提问于 2025-04-18 04:14

我正在尝试使用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

文档中提到:

当输出数据中出现当前的分隔符时,它会被当前的转义字符(escapechar)前置。如果没有设置转义字符,写入器在遇到需要转义的字符时会抛出错误。

现在,分隔符('|',也就是管道符号)在数据中并没有出现。那为什么CSV写入器还要尝试去转义某些东西呢?

1 个回答

14

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

撰写回答