是什么在文件中的对象Rb和R + B模式之间的区别(What is the difference b

2019-08-18 16:33发布

我使用咸菜模块在Python和尝试不同的文件IO模式:

# works on windows.. "rb"
with open(pickle_f, 'rb') as fhand:
        obj = pickle.load(fhand)

# works on linux.. "r"
with open(pickle_f, 'r') as fhand:
        obj = pickle.load(fhand)

# works on both "r+b"
with open(pickle_f, 'r+b') as fhand:
        obj = pickle.load(fhand)

我从来没有读过关于“R + B”模式的任何地方,却发现在提关于它的文档 。

我得到EOFError在Linux上,如果我用"rb"模式,并在Windows上,如果"r"被使用。 我只是给了"r+b"模式的一个镜头,它的工作在两个。

什么是"r+b"模式? 什么是“RB”和“R + B”之间的区别? 为什么它的工作,当别人不一样?

Answer 1:

r+是用于读出,和写入模式。 b是二进制。 r+b模式是开在读取或写入模式的二进制文件。
你可以阅读更多这里 。



Answer 2:

r打开阅读,而r+阅读和写作打开。 该b是二进制。

这是在阐明文件 :

模式最常用的值是'r'的阅读, 'w'写(截断如果它已经存在的文件),和'a'的追加(其中一些Unix系统意味着所有写入追加到尾部该文件而不考虑当前的搜索位置)。 如果模式被省略,则默认为'r' 。 默认是使用文本模式,它可以将'\n'字符以特定于平台的表示写作和回读。 因此,打开二进制文件时,你应该追加'b'的模式值以二进制方式打开该文件,这将提高便携性。 (追加'b'是即使在不区别对待二进制文件和文本文件,它作为文件系统非常有用。)请参见下面的方式更可能值。

模式'r+''w+''a+'打开更新文件(注意, 'w+'截断该文件)。 追加'b'的模式,以二进制方式打开文件,对二进制和文本文件的系统; 在不具备这种区分系统,添加了'b'没有效果。



Answer 3:

我的理解是,将r+打开了读取和写入(就像w+ ,尽管在评论如指出,将截断该文件)。 所述b只是打开它以二进制模式,这被认为是少知道的东西线分离器(至少在C ++)。



Answer 4:

在Windows中,“B”附加到模式以二进制方式打开文件,所以也有模式,如“RB”,“WB”和“R + B”。 在Windows上的Python使文本和二进制文件之间的区别; 在文本文件中的结束行字符被读取或写入数据时会自动轻微改变。 这幕后的修改文件数据被罚款ASCII文本文件,但它会损坏二进制数据一样,在JPEG或EXE文件。 要非常小心,读,写等文件时使用二进制模式。 在Unix上,它不会伤害追加一个“B”的模式,这样你就可以平台独立所有使用它的二进制文件。

来源: 读取和写入文件



文章来源: What is the difference between rb and r+b modes in file objects