Python 3中二进制与默认模式的含义是什么?
当我尝试打开以其他模式保存的泡菜文件时,出现错误,而在Python 2.7中,我可以在模式之间进行切换而没有任何问题。这个问题很容易解决,但是为什么它首先很重要?
通常:
答案 0 :(得分:3)
来自docs:
如Overview中所述,Python区分二进制I / O和文本I / O。以二进制模式打开的文件(包括 mode 参数中的
'b'
)以bytes
对象的形式返回内容,而没有任何解码。在文本模式下(默认设置,或者在 mode 参数中包含't'
时),文件内容以str
的形式返回,首先使用平台相关的编码,或使用指定的 encoding (如果指定)。
毫不奇怪,您应该对文本数据使用(默认)文本模式,对二进制数据使用二进制模式–包括pickle
数据,其中数据明确地defined为二进制:
pickle
模块实现了二进制协议,用于对Python对象结构进行序列化和反序列化。 “ Pickling” 是将Python对象层次结构转换为字节流的过程,而“ unpickling” 是相反的操作,即字节流(来自{{ 3}}或binary file)转换回对象层次结构。
Python 3接近Python 2的文本和二进制数据https://docs.python.org/3/glossary.html#term-bytes-like-object之间的区别–实际上,这是更改主要版本号的主要原因。因此,有时在Python 2中似乎没有充分考虑到这种区别的代码似乎“可以正常工作”(但随后常常会以意想不到的方式咬住您)。