从CSV读取:分隔符必须是字符串,而不是unicode

时间:2016-11-28 10:40:33

标签: python django csv

我有一个工作例程(在一些有帮助的人在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'"'))

强制分隔符将是一个字符串,但我得到完全相同的错误。我做错了什么?

2 个答案:

答案 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('"'))