我在Python中使用pickle模块并尝试不同的文件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”模式,但在documentation中发现了这一点。
如果我使用EOFError
模式,我在Linux上获得"rb"
;如果使用"r"
,则在Windows上获得"r+b"
。我只是给了"r+b"
模式一个镜头,它正在两者上工作。
什么是{{1}}模式? “rb”和“r + b”之间有什么区别?当其他人不这样做时,为什么会这样?
答案 0 :(得分:58)
r+
用于读取和写入模式。 b
用于二进制。
r+b
模式以读或写模式打开二进制文件
您可以阅读更多here。
答案 1 :(得分:17)
r
会打开阅读,而r+
会打开阅读和写作。 b
用于二进制。
这是在documentation:
中详细说明的最常用的模式值是
'r'
用于读取,'w'
用于写入(截断文件,如果它已经存在),'a'
用于追加(在某些Unix上)系统意味着所有写入都附加到文件的末尾,而不管当前的搜索位置如何)。如果省略mode,则默认为'r'
。默认设置是使用文本模式,该模式可以在写入时将'\n'
个字符转换为特定于平台的表示,并在读取时返回。因此,在打开二进制文件时,您应该将'b'
附加到模式值以在二进制模式下打开文件,这将提高可移植性。 (即使在不以不同方式处理二进制文件和文本文件的系统上,附加'b'
也很有用,它可用作文档。)有关模式的更多可能值,请参见下文。模式
'r+'
,'w+'
和'a+'
打开文件进行更新(请注意'w+'
截断文件)。将'b'
附加到模式以在二进制模式下打开文件,在区分二进制文件和文本文件的系统上;在没有这种区别的系统上,添加'b'
无效。
答案 2 :(得分:6)
我的理解是为读取和写入添加r+
(就像w+
一样,尽管如注释中所指出的那样,将截断文件)。 b
只是以二进制模式打开它,它应该不太了解行分隔符(至少在C ++中)。
答案 3 :(得分:2)
在Windows上,' b'附加到模式后以二进制模式打开文件,所以 还有像' rb',' wb'和' r + b'等模式。 Windows上的Python 区分文本和二进制文件;行尾 文本文件中的字符会在数据时自动更改 被读或写。这种对文件数据的幕后修改 适用于ASCII文本文件,但它会破坏这样的二进制数据 在JPEG或EXE文件中。阅读时要非常小心使用二进制模式 并写这样的文件。在Unix上,附加一个' b'至 模式,所以你可以平台独立使用它为所有二进制文件 文件。