文件对象中的rb和r + b模式有什么区别

Iam*_*ool 41 python file-io file pickle

我在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)
Run Code Online (Sandbox Code Playgroud)

我从来没有在任何地方阅读过"r + b"模式,但在文档中提到了它.

我得到EOFError在Linux上,如果我使用的"rb"模式,在windows下"r"使用.我只是给了"r+b"模式一个镜头,它正在两个都工作.

什么"r+b"模式?"rb"和"r + b"之间有什么区别?当别人不这样做时,为什么会这样?

kar*_*ikr 64

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


NPE*_*NPE 20

r打开阅读,然后r+打开阅读和写作.这b是二进制的.

这在文档中有详细说明:

最常用的模式值是'r'读取,'w'写入(截断文件,如果它已经存在),以及'a'附加(在某些Unix系统上,意味着所有写入都附加到文件的末尾,而不管当前的搜索位置).如果省略mode,则默认为'r'.默认设置是使用文本模式,该模式可以'\n'在写入时将字符转换为特定于平台的表示形式,然后在读取时将其转换 因此,在打开二进制文件时,您应该附加'b'模式值以二进制模式打开文件,这将提高可移植性.('b'即使在不以不同方式处理二进制文件和文本文件的系统上,附加也很有用,它可用作文档.)有关模式的更多可能值,请参见下文.

模式'r+','w+''a+'打开文件进行更新(请注意'w+'截断文件).'b'在区分二进制文件和文本文件的系统上,附加到以二进制模式打开文件的模式; 在没有这种区别的系统上,添加'b'没有效果.

  • 我不确定你是否仔细阅读了这个答案,@Iamcool。它回答了您的所有问题。 (2认同)

Dan*_*ocq 6

我的理解是r+为读取和写入添加打开(就像w+在注释中指出的那样,将截断文件).在b刚刚打开它以二进制模式,这被认为是少知道的东西线分离器(至少在C++).

  • 如果我没弄错的话,"w +"将删除文件(如果存在),然后将其打开以进行读写.它与"r +"不同. (5认同)