Mik*_*maa 144 python python-2.7 python-3.x
我有一个为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:
Run Code Online (Sandbox Code Playgroud)
现在我想将这个代码反向移植到Python 2.x,这样我就可以拥有一个适用于Python 2和Python 3的代码库.
什么是解决open()差异和缺乏编码参数的推荐策略?
我可以使用Python 3 open()样式的文件处理程序来处理字节串,所以它会像Python 2一样open()吗?
Len*_*bro 166
如果您只需要支持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.5或更早版本,则可以使用codecs.open.它还有一个编码参数,io.open除了它以不同方式处理行结尾之外,它非常相似.
open()流式字节串的Python 3 样式文件处理程序:open(filename, 'rb')
Run Code Online (Sandbox Code Playgroud)
注意'b',意思是'二进制'.
mfu*_*ger 61
我认为
from io import open
Run Code Online (Sandbox Code Playgroud)
应该做.
Fli*_*imm 20
这是一种方式:
with open("filename.txt", "rb") as f:
contents = f.read().decode("UTF-8")
Run Code Online (Sandbox Code Playgroud)
这可能会成功:
import sys
if sys.version_info[0] > 2:
# py3k
pass
else:
# py2
import codecs
import warnings
def open(file, mode='r', buffering=-1, encoding=None,
errors=None, newline=None, closefd=True, opener=None):
if newline is not None:
warnings.warn('newline is not supported in py2')
if not closefd:
warnings.warn('closefd is not supported in py2')
if opener is not None:
warnings.warn('opener is not supported in py2')
return codecs.open(filename=file, mode=mode, encoding=encoding,
errors=errors, buffering=buffering)
Run Code Online (Sandbox Code Playgroud)
然后你可以用python3方式保存代码.
请注意,某些API,如newline,closefd,opener不工作
| 归档时间: |
|
| 查看次数: |
176049 次 |
| 最近记录: |