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

Posted

技术标签:

【中文标题】从 CSV 读取:分隔符必须是字符串,而不是 unicode【英文标题】:Reading from CSV: delimiter must be a string, not unicode 【发布时间】:2017-04-12 01:18:54 【问题描述】:

我有一个工作例程(在一些有用的人在this 线程中给了我一些重要建议之后)从 CSV 文件创建模型实例。到目前为止,我一直在使用 Python 2.7,并确保任何地方都没有出现特殊字符。目前我需要迁移到 Unicode。我加了

# -*- coding: utf-8 -*-

在我的文件顶部,一切运行良好(我可以在我的代码和 cmets 中使用特殊字符),除了 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'"'))

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

【问题讨论】:

试用:delimiter=str(u';').encode('utf-8') 它工作正常,非常感谢。你能告诉我我应该如何发现它吗? [请发布“答案”,我会接受] 你没有迁移到 Python3.x 吗? 没有。我应该是的。 :-( 【参考方案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('"'))  

【讨论】:

【参考方案2】:

您的默认编码可能不是最合适的。

像这样指定编码:

dataReader = csv.reader(open(filename), delimiter=str(u';').encode('utf-8'), quotechar=str(u'"').encode('utf-8'))

【讨论】:

我只需要str('\t')。你确定要申请u.encode('utf-8')吗?

以上是关于从 CSV 读取:分隔符必须是字符串,而不是 unicode的主要内容,如果未能解决你的问题,请参考以下文章

将 .csv 文件从 URL 读取到 Python 3.x - _csv.Error:迭代器应返回字符串,而不是字节(您是不是以文本模式打开文件?)

有没有办法使用 read.csv 从字符串值而不是 R 中的文件读取?

从 bash 或 perl 脚本中读取 CSV [重复]

当某些数字包含逗号作为千位分隔符时如何读取数据?

python导入csv时,如何将银行卡号正常读入,而不是默认的科学计数法?

CSV 应该返回字符串,而不是字节错误