我在理解在 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')
但这种方法最终变得极其缓慢。 因此我的问题是:
有没有正确的方法,最快的方法是什么? 谢谢
最佳答案
您的数据可能不是 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
作为错误处理程序,这样您至少可以为任何无法解码的内容提供占位符。
关于Python 将文件读入 unicode 字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38488186/