我有一个为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、 这样我就有了一个与Python2和Python3一起工作的代码库.

对于open()个差异和缺少编码参数,建议采用什么策略?

我可以有一个Python3 open()风格的文件处理程序,它可以通过测试环进行流处理,这样它就可以像Python2 open()一样工作了吗?

推荐答案

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

如果只需要支持Python 2.6和2.7,可以使用io.open而不是open.io是Python3的新io子系统,它也存在于Python2,6 ans 2.7中.请注意,在Python2.6(以及3.0)中,它完全是用Python实现的,速度非常慢,因此如果您需要读取文件的速度,那么这不是一个好的 Select .

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

2. To get a Python 3 open() style file handler which streams bytestrings:

open(filename, 'rb')

注意"b",意思是"二进制".

Python-3.x相关问答推荐

Pandas -我们如何在一行中应用多个要求

CDKTF ec2 具有特定私有 IP 地址的娱乐

Pandas 转换为日期时间

调用 Clear 时 Airflow 会加载新代码吗

如何在类中的函数(以 self 作为第一个参数)中使用递归

多进程:两个进程,一起杀死

以编程方式映射 uniprot ID 时如何解决 400 客户端错误?

python 3集合中的Discard()和Remove()函数有什么区别

在python中基于列表理解的条件下跳过元素

ValueError:FixedLocator 位置的数量 (5),通常来自对 set_ticks 的调用,与刻度标签的数量 (12) 不匹配

TensorFlow:dataset.train.next_batch 是如何定义的?

Python 类型提示语法如何/为什么起作用?

pandas 中 df.reindex() 和 df.set_index() 方法的区别

cv2 python 没有 imread 成员

Python3 的超级和理解-> TypeError?

ImportError:无法导入名称cross_validate

为 Python 3 和 PyQt 构建可执行文件

如何在python中创建代码对象?

命名参数可以与 Python 枚举一起使用吗?

如何将python日志(log)级别名称转换为整数代码