我使用咸菜模块在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”之间的区别? 为什么它的工作,当别人不一样?
r+
是用于读出,和写入模式。 b
是二进制。 r+b
模式是开在读取或写入模式的二进制文件。
你可以阅读更多这里 。
r
打开阅读,而r+
阅读和写作打开。 该b
是二进制。
这是在阐明文件 :
模式最常用的值是'r'
的阅读, 'w'
写(截断如果它已经存在的文件),和'a'
的追加(其中一些Unix系统意味着所有写入追加到尾部该文件而不考虑当前的搜索位置)。 如果模式被省略,则默认为'r'
。 默认是使用文本模式,它可以将'\n'
字符以特定于平台的表示写作和回读。 因此,打开二进制文件时,你应该追加'b'
的模式值以二进制方式打开该文件,这将提高便携性。 (追加'b'
是即使在不区别对待二进制文件和文本文件,它作为文件系统非常有用。)请参见下面的方式更可能值。
模式'r+'
, 'w+'
和'a+'
打开更新文件(注意, 'w+'
截断该文件)。 追加'b'
的模式,以二进制方式打开文件,对二进制和文本文件的系统; 在不具备这种区分系统,添加了'b'
没有效果。
我的理解是,将r+
打开了读取和写入(就像w+
,尽管在评论如指出,将截断该文件)。 所述b
只是打开它以二进制模式,这被认为是少知道的东西线分离器(至少在C ++)。
在Windows中,“B”附加到模式以二进制方式打开文件,所以也有模式,如“RB”,“WB”和“R + B”。 在Windows上的Python使文本和二进制文件之间的区别; 在文本文件中的结束行字符被读取或写入数据时会自动轻微改变。 这幕后的修改文件数据被罚款ASCII文本文件,但它会损坏二进制数据一样,在JPEG或EXE文件。 要非常小心,读,写等文件时使用二进制模式。 在Unix上,它不会伤害追加一个“B”的模式,这样你就可以平台独立所有使用它的二进制文件。
来源: 读取和写入文件