Python将文件读入unicode字符串

Clo*_*One 3 python string unicode file

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

我的目标是有效地逐行读取一些巨大的(最多 7GB)文件。我是用简单的方法完成的,with open(filename) as f:但最终在 ASCII 解码中出现错误。

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

with codecs.open(filename, 'r', encoding='utf-8') as logfile:
Run Code Online (Sandbox Code Playgroud)

然而,这最终是:

UnicodeDecodeError: 'utf8' codec can't decode byte 0x88 in position 13: invalid start byte
Run Code Online (Sandbox Code Playgroud)

坦率地说,我不明白为什么会引发此异常。

我找到了一个可行的解决方案:

with open(filename) as f:
    for line in logfile:
        line = unicode(line, errors='ignore')
Run Code Online (Sandbox Code Playgroud)

但这种方法最终非常缓慢。因此我的问题是:

有没有正确的方法来做到这一点,最快的方法是什么?谢谢

Mar*_*ers 5

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

如果您必须指定一个错误处理程序,您也可以在打开文件时这样做。使用io.open()功能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:
Run Code Online (Sandbox Code Playgroud)

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