将Python 3反向移植打开(encoding=“utf-8”)到Python 2

2020-12-04 16:12:53 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个Python代码库,为Python 3构建,它使用python3样式的open()和编码参数:

https://github.com/miohtama/vvv/blob/master/vvv/textlineplugin.py#L47

    with open(fname, "rt", encoding="utf-8") as f:

现在我想将这段代码反向移植到Python2.x,这样我就有了一个与Python2和Python3一起工作的代码库。

建议如何解决open()差异和缺少编码参数?

我可以有一个Python 3open()风格的文件处理程序,它可以流式处理testrings,所以它的行为就像Python 2open()

3条回答
网友
1楼 ·

有一种方法:

with open("filename.txt", "rb") as f:
    contents = f.read().decode("UTF-8")
网友
2楼 ·

我想

from io import open

应该可以。

网友
3楼 ·

一。要在Python 2中获取编码参数:

如果您只需要支持Python 2.6和2.7,那么可以使用^{},而不是openio是Python 3的新io子系统,它也存在于Python 2,6ans2.7中。请注意,在Python2.6(以及3.0)中,它是纯用Python实现的,而且速度非常慢,因此如果您需要读取文件的速度,它不是一个好的选择。

如果需要速度,并且需要支持Python2.6或更早版本,则可以使用^{}。它还有一个编码参数,与io.open非常相似,只是它处理行尾的方式不同。

2。要获取Python 3open()样式的文件处理程序,该文件处理程序将按testrings进行流处理:

open(filename, 'rb')

注意“b”,意思是“二进制”。

相关问题