我有一个工作例程(在一些有帮助的人在this线程中给我一些关键建议后)从CSV文件创建模型实例。到目前为止,我一直在使用Python 2.7,并确保没有任何特殊字符出现在任何地方。目前我需要转向Unicode。我添加了
# -*- coding: utf-8 -*-
在我的文件的顶部,一切都运行良好(我可以在我的代码和注释中使用特殊字符),除了CSV阅读器例程。即,shell反对此部分:
dataReader = csv.reader(open(filename), delimiter=';', quotechar='"')
之前正在使用
TypeError: "delimiter" must be string, not unicode
在阅读了一些较旧的问题后,我转而
dataReader = csv.reader(open(filename), delimiter=str(u';'), quotechar=str(u'"'))
强制分隔符将是一个字符串,但我得到完全相同的错误。我做错了什么?
答案 0 :(得分:9)
您的默认编码可能不是最合适的。
指定如下编码:
dataReader = csv.reader(open(filename), delimiter=str(u';').encode('utf-8'), quotechar=str(u'"').encode('utf-8'))
答案 1 :(得分:1)
当我将代码从没有from __future__ import unicode_literals
的文件切换到有文件的文件时发生了。 (python 2.7)
它更改了字符串的默认编码,并与现有代码混淆。
通过更改为它来解决:
# worked before using unicode_literals
writer = csv.writer(csvfile, delimiter=';', quotechar='"')
到
# worked when using unicode_literals
writer = csv.writer(csvfile, delimiter=str(';'), quotechar=str('"'))