从 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 中的文件读取?