许多文本编码具有这样的特性,即您可以反向浏览编码文本并仍能解码它。 ASCII、UTF-8、UTF-16和UTF-32都具有此特性。这使您可以轻松地执行一些操作,例如读取文件的最后一行而无需读取其前面的所有行,或者从当前位置向后几行。
几个人似乎没有理解“读取整个文件来做这件事是违背初衷的”这一点。顺便澄清一下,这也需要适用于可变长度编码,UTF-8支持是必须的。
不幸的是,Python似乎没有任何方法来反向解码文件。您不能反向读取,也不能在编码文件中按字符数量进行搜索。codecs
模块中的解码器支持逐步解码,但不支持反向解码。我找不到任何“UTF-8-backwards”编解码器,我可以将UTF-8字节以相反的顺序输入其中。
我可能可以自己实现基于编解码器的字符边界同步,反向读取二进制块,并将正确对齐的块馈送到codecs
模块中的适当解码器中,但这听起来像是一个非专家会错过一些微妙细节并且不会注意到输出错误的事情。
有没有使用现有工具以简单方式在Python中将文本反向解码的方法?
几个人似乎没有理解“读取整个文件来做这件事是违背初衷的”这一点。顺便澄清一下,这也需要适用于可变长度编码,UTF-8支持是必须的。
(x & 0xc0) == 0x80
。 - Robᵩmmap
(对于非ASCII基础编码,请替换b'\n'
并使用.rfind()
以提高速度)](https://dev59.com/jXVC5IYBdhLWcg3w9GHM#6813975)并在每行上调用`line.decode(encoding)`。 - jfs