I am using pickle module in Python and trying different file IO modes:
# 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)
I never read about "r+b" mode anywhere, but found mentioning about it in the documentation.
I am getting EOFError
on Linux if I use "rb"
mode and on Windows if "r"
is used. I just gave "r+b"
mode a shot and it's working on both.
What's "r+b"
mode? What's the difference between "rb" and "r+b"? Why does it work when the others don't?
r
opens for reading, whereasr+
opens for reading and writing. Theb
is for binary.This is spelled out in the documentation:
My understanding is that adding
r+
opens for both read and write (just likew+
, though as pointed out in the comment, will truncate the file). Theb
just opens it in binary mode, which is supposed to be less aware of things like line separators (at least in C++).r+
is used for reading, and writing mode.b
is for binary.r+b
mode is open the binary file in read or write mode.You can read more here.
Source: Reading and Writing Files