我有一个为 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()差异和缺少编码参数的推荐策略是什么?
open()
我可以有一个 Python 3open()风格的文件处理程序来流式传输字节串,所以它会像 Python 2 一样工作open()吗?
如果您只需要支持 Python 2.6 和 2.7,则可以io.open使用open. io是 Python 3 的新 io 子系统,它也存在于 Python 2,6 和 2.7 中。请注意,在 Python 2.6(以及 3.0)中,它完全在 python 中实现并且非常慢,因此如果您需要快速读取文件,这不是一个好的选择。
io.open
open
io
如果您需要速度,并且需要支持 Python 2.6 或更早版本,则可以codecs.open改用。io.open它也有一个编码参数,除了它处理行尾的方式不同外,它非常相似。
codecs.open
open(filename, 'rb')
注意’b’,意思是’二进制’。