当前位置: 首页 > 面试题库 >

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

殷轶
2023-03-14
问题内容

我有一个为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()吗?


问题答案:

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”,意思是“二进制”。



 类似资料:
  • 描述 (Description) 方法encode()返回字符串的编码版本。 默认编码是当前的默认字符串编码。 可以给出错误以设置不同的错误处理方案。 语法 (Syntax) str.encode(encoding='UTF-8',errors='strict') 参数 (Parameters) encoding - 这是要使用的编码。 有关所有编码方案的列表,请访问: Standard Enc

  • 描述 (Description) 方法decode()使用为编码注册的编解码器对字符串进行解码。 它默认为默认字符串编码。 语法 (Syntax) Str.decode(encoding='UTF-8',errors='strict') 参数 (Parameters) encoding - 这是要使用的编码。 有关所有编码方案的列表,请访问: 标准编码。 errors - 可以设置不同的错误处理

  • 问题内容: Java 2SE v1.4一直持续到2010年底。这确实很讨厌,但我们无能为力。我们现在必须使用哪些选项才能使用某些新功能?我可以想到几种方式 更改字节码,例如使用Retrotranslator或Retroweaver。 库的反向移植,例如Concurrent Backport,但这对泛型没有帮助。 Java 5功能的仿真,例如选中的Collections,带有辅助方法的Varargs

  • 问题内容: 我已经尝试将invRegex.py移植到node.js实现了一段时间,但是我仍然在努力。多亏了ret.js标记生成器,我已经有了正则表达式分析树,并且运行良好,但是以内存高效的方式实际生成和连接所有不同元素对我来说是非常具有挑战性的。为简单起见,可以说我有以下正则表达式: 喂养到产生下列输出( tabbified 取更小的空间): 考虑到我能够获取每个单独的令牌并产生所有有效的单独输出

  • 我开始转换所有64位,并注意Mac汇编语法。 我有东西要组装,但我立即遇到了一个奇怪的分段错误: QUIT通过宏defword定义如下: null 附注:是的,我可以让琼斯在Docker图像中完美地工作,但这是重点之外的。我真的希望它在卡特琳娜64位工作,开箱即用。

  • 问题内容: 我必须用Java处理这种情况: 我从声明了encoding = utf-8的客户端收到XML格式的请求。不幸的是,它可能不包含utf-8字符,并且有必要从我这一边的xml中删除这些字符(旧式)。 让我们考虑一个示例,其中该无效XML包含£(磅)。 1)我将xml作为带有£的java字符串(我现在无法访问接口,但我很可能将xml作为java的字符串)。我可以使用replaceAll(£,