Python 将文件读入 unicode 字符串

标签 python string file unicode

我在理解在 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/

相关文章:

java - 如何制作一个接受文件名并可以打印其内容的类?

python - CSV 文件创建问题

python - python 脚本如何变成可执行文件?

python 字符串格式化KeyError

python - 将 json 元素添加到 pandas 数据框

java - AsyncTask 得到一个错误的字符串参数

python - 元组列表(从元组中删除特殊项目)

python - Python 中的文件校验和

python - 国际化django模板中的多个复数变量

python - 如何在 Mac OSX 10.5.8 上为 Google App Engine 安装 PIL?