【发布时间】:2019-12-02 01:11:04
【问题描述】:
为什么writerow() 说我在通过str,而我在通过unicode?
import io
import csv
with io.open('test.csv', 'w', encoding="utf-8") as f:
writer = csv.writer(f)
x = [unicode(v, 'utf8') for v in ['id:ID', 'pos:string', 'definition:string', ':LABEL']]
print x
print type(x[0])
writer.writerow(x)
[u'id:ID', u'pos:string', u'definition:string', u':LABEL']
<type 'unicode'>
Traceback (most recent call last):
File "testcsv.py", line 9, in <module>
writer.writerow(x)
TypeError: write() argument 1 must be unicode, not str
【问题讨论】:
-
我认为 Python 2.x 中的
csv模块无法处理 Unicode。请参阅documentation 中的备注。 -
我同意这令人困惑——我认为正在发生以下情况:
writer.writerow()调用将x[0]强制转换为str并将其传递给f.write()(您使用io.open打开的流) .回溯并没有清楚地表明这一点。 -
Python 处理文本,尤其是 CSV 文件,是 Python 3 中真正得到修复的一件事。您应该真正考虑改用 Python 3。
标签: python csv unicode python-2.x