Python将文件读入unicode字符串

Python将文件读入unicode字符串,python,string,file,unicode,Python,String,File,Unicode,我在理解Python中处理unicode字符串的正确方法时遇到了一些问题。我已经读过很多关于它的问题,但仍然不清楚在读写文件时应该做些什么来避免出现问题 我的目标是逐行高效地读取一些巨大的(高达7GB)文件。我使用的是简单的,open(filename)为f:,但结果是ASCII解码出错 然后我读到正确的方法是写: with codecs.open(filename, 'r', encoding='utf-8') as logfile: 然而,这最终导致: UnicodeDecodeError

我在理解Python中处理unicode字符串的正确方法时遇到了一些问题。我已经读过很多关于它的问题,但仍然不清楚在读写文件时应该做些什么来避免出现问题

我的目标是逐行高效地读取一些巨大的(高达7GB)文件。我使用的是简单的
,open(filename)为f:
,但结果是ASCII解码出错

然后我读到正确的方法是写:

with codecs.open(filename, 'r', encoding='utf-8') as logfile:
然而,这最终导致:

UnicodeDecodeError: 'utf8' codec can't decode byte 0x88 in position 13: invalid start byte
坦率地说,我不明白为什么会提出这个例外

我找到了一个可行的解决方案,具体如下:

with open(filename) as f:
    for line in logfile:
        line = unicode(line, errors='ignore')
但这种方法最终速度慢得令人难以置信。 因此,我的问题是:

有没有正确的方法,最快的方法是什么? 谢谢

您的数据可能不是UTF-8编码的。找出正确的编码并使用它。我们无法告诉您什么编解码器是正确的,因为我们无法查看您的数据

如果必须指定错误处理程序,则最好在打开文件时指定。使用
codecs
是一个较旧的库,存在一些问题,
io
(它支持Python3中的所有I/O,并被后端口到Python2)更加健壮和通用

io.open()
函数也会出现
errors

import io

with io.open(filename, 'r', encoding='utf-8', errors='replace') as logfile:

我选择了
replace
作为错误处理程序,这样您至少可以为无法解码的任何内容提供占位符字符。

您是否100%确定您的文件是UTF-8编码的?您的错误表明您的文件至少已损坏。顺便说一下,不要使用
编解码器。open()
;请改用更新且更健壮的io.open()。您可以为该调用指定一个
errors
处理程序。@MartijnPieters不,我不能100%确定它是utf-8编码的。奇怪的是,我能够在不考虑utf-8的情况下定期打开它。如果它被破坏了,
open(filename)
是否也会引发异常?如果没有,因此我不得不采用
unicode()
方法,有没有办法让它更快?没有,解码只在读取数据时进行,如果可以提前解码,打开文件不会测试文件中的所有数据。最后,在Python中,您将7GB的数据作为丰富的unicode对象进行处理。不管怎样,还是要慢一点。谢谢你。此解决方案有效,比
unicode()
方法稍快。尽管如此,它还是比普通的非unicode方法慢了很多,但可能没有办法达到可比的速度。@ClonedOne:根据您处理这些行的方式和实际使用的编解码器,您可能只将数据作为二进制处理,而不对其进行解码。