Python 3 中的二进制与默认模式的含义是什么?当我尝试打开以另一种模式保存的泡菜文件时,出现错误,而在 Python 2.7 中,我可以在模式之间切换而没有任何问题。这个问题很容易解决,但为什么它首先重要?一般来说:为了更大的便携性,应该首选哪种模式?是否存在首选模式的特定场景(例如处理纯文本文件等)?二进制/默认模式对 UTF-8 等编码有什么影响?
1 回答
白衣非少年
TA贡献1155条经验 获得超0个赞
从文档:
正如概述中提到的,Python 区分二进制和文本 I/O。以二进制模式打开的文件(包括
'b'
在mode参数中)将内容作为bytes
对象返回,无需任何解码。在文本模式下(默认,或当't'
包含在mode参数中时),文件的内容作为 返回str
,字节已首先使用平台相关的编码或使用指定的编码(如果给定)进行解码。
不出所料,您应该对文本数据使用(默认)文本模式,对二进制数据使用二进制模式——包括pickle
明确定义为二进制的数据:
该
pickle
模块实现了用于序列化和反序列化 Python 对象结构的二进制协议。“pickling”是将 Python 对象层次结构转换为字节流的过程,“unpickling”是相反的操作,即字节流(来自二进制文件或https://docs.python.org/3/glossary .html#term-bytes-like-object ) 被转换回对象层次结构。
Python 3 处理文本和二进制数据之间的区别与 Python 2完全不同——实际上,这是主版本号更改的主要原因。因此,有时没有充分考虑区别的代码在 Python 2 中似乎“正常工作”(但随后经常会以意想不到的方式进一步咬你)。
添加回答
举报
0/150
提交
取消