小编典典

将 Python 3 open(encoding="utf-8") 向后移植到 Python 2

all

我有一个为 Python 3 构建的 Python 代码库,它使用 Python 3 风格的 open() 和 encoding 参数:

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()吗?


阅读 164

收藏
2022-08-17

共1个答案

小编典典

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

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

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

2. 获取open()流字节串的 Python 3 样式文件处理程序:

open(filename, 'rb')

注意’b’,意思是’二进制’。

2022-08-17