【发布时间】:2018-11-03 01:29:08
【问题描述】:
我有以下代码:
with open(filename, 'rt') as csvfile:
csvDictReader = csv.DictReader(csvfile, delimiter=',', quotechar='"')
for row in csvDictReader:
print(row)
只要文件大小小于 40k 字节,程序就会运行良好。 当文件大小超过 40k 时,我在尝试读取文件时收到此错误:
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xa0 in position 7206: invalid start byte
实际文件内容似乎没有问题,只有文件本身的大小(40k 字节真的很小)。
当文件大小大于 40K 字节时,错误总是发生在包含第 32K 字节的行上。
我有一种感觉,python 无法毫无例外地读取超过 40K 字节的文件,而只是在中间的第 32K 字节附近截断它。那是对的吗?这个限制在哪里定义?
【问题讨论】:
-
它是文件内容,而不是文件大小。您在位置 7206 中有一个非 Unicode 字节。
-
不,Python 没有这个限制。
-
你用的是python 2还是3?您是否希望文件中包含任何非 Ascii 字符?你知道它是怎么编码的吗?最明显的是,您是否打开了编辑器并检查了字符位置 7206 处的内容?你可以
print(open(filename, 'rb').read(7240)[7190:])看看那个区域的人物。 -
@tdelaney:它试图解码的事实表明它是 Python 3; Python 2 的
open不解码,Python 2 的csv模块即使处理了unicode类型也不处理(from io import open在 Py2 中会得到 Py3 风格的open,但它不会兼容csv,它只处理Py2中的str类型)。