【发布时间】:2016-07-20 18:29:04
【问题描述】:
我在理解 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')
但这种方法最终变得异常缓慢。 因此我的问题是:
有没有正确的方法,最快的方法是什么? 谢谢
【问题讨论】:
-
您是否 100% 确定您的文件是 UTF-8 编码的?您的错误表明您的文件至少已损坏。
-
顺便说一句,不要使用
codecs.open();请改用更新且更强大的io.open()。您可以为该调用指定errors处理程序。 -
@MartijnPieters 不,我不是 100% 确定它是 utf-8 编码的。看起来很奇怪的是,我可以在不考虑 utf-8 的情况下定期打开它。如果它被损坏,
open(filename)也不应该引发异常吗?如果没有,因此我不得不采用unicode()方法,有没有办法让它更快? -
不,只有在读取数据时才会进行解码,如果可以预先解码,则打开文件不会测试文件中的所有数据。
-
最后,您正在 Python 中将 7GB 的数据处理为丰富的 Unicode 对象。预计会有一些缓慢无论如何。
标签: python string file unicode