我在理解在Python中处理unicode字符串的正确方法时遇到了一些麻烦。我已经阅读了很多关于它的问题,但我仍然不清楚如何在阅读和编写文件时避免出现问题。
我的目标是逐行高效地读取一些巨大的(最多7GB)文件。我是用简单的with open(filename) as 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')
但这种方法结果非常缓慢。 因此我的问题是:
有没有正确的方法,最快的方法是什么? 感谢
答案 0 :(得分:4)
您的数据可能不是 UTF-8编码。找出正确的编码并使用它。我们无法告诉您哪种编解码器是正确的,因为我们无法看到您的数据。
如果必须指定错误处理程序,则在打开文件时也可以这样做。使用io.open()
function; codecs
是一个较旧的库,有一些问题io
(它支持Python 3中的所有I / O并被反向移植到Python 2)更加强大和通用。
io.open()
函数也需要errors
:
import io
with io.open(filename, 'r', encoding='utf-8', errors='replace') as logfile:
我选择replace
作为错误处理程序,因此您至少会为无法解码的任何内容提供占位符字符。