一尘不染

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

python

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

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

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

现在,我想将此代码反向移植到Python 2.x,这样我将拥有一个可用于Python 2和Python 3的代码库。

建议的解决open()差异和缺乏编码参数的策略是什么?

我可以使用一个Python 3open()样式的文件处理程序来流字节字符串,以便像Python 2那样工作open()吗?


阅读 241

收藏
2021-01-20

共1个答案

一尘不染

1.在Python 2中获取编码参数:

如果仅需要支持Python
2.6和2.7,则可以使用io.open代替openio是Python
3的新io子系统,它也存在于Python 2,6 ans 2.7中。请注意,在Python
2.6(以及3.0)中,它是完全在python中实现的,并且运行速度非常慢,因此,如果您需要快速读取文件,则不是一个好的选择。

如果需要速度,并且需要支持Python
2.6或更早版本,则可以codecs.open改用。它也有一个编码参数,io.open除了它以不同的方式处理行尾之外,它与之非常相似。

2.要获取open()可流字节串的Python 3样式文件处理程序,请执行以下操作:

open(filename, 'rb')

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

2021-01-20