打开文件时“ rb”和“ wb”是什么意思?

时间:2019-02-22 17:23:02

标签: python python-3.x encoding pickle python-2.x

Python 3中二进制与默认模式的含义是什么?

当我尝试打开以其他模式保存的泡菜文件时,出现错误,而在Python 2.7中,我可以在模式之间进行切换而没有任何问题。这个问题很容易解决,但是为什么它首先很重要?

通常:

  • 应采用哪种模式以提高便携性?是否有在特定情况下应首选模式(例如处理纯文本文件等)?
  • 相对于UTF-8等编码,二进制/默认模式的含义是什么?

1 个答案:

答案 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中似乎没有充分考虑到这种区别的代码似乎“可以正常工作”(但随后常常会以意想不到的方式咬住您)。