Подтвердить что ты не робот

В чем разница между режимами rb и r + b в файловых объектах

Я использую pickle module в 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"? Почему это работает, когда другие не делают?

4b9b3361

Ответ 1

r+ используется для чтения и записи. b для двоичного. Режим r+b открывает двоичный файл в режиме чтения или записи.
Здесь вы можете прочитать .

Ответ 2

r открывается для чтения, а r+ открывается для чтения и записи. b для двоичного.

Это указано в документации:

Наиболее часто используемые значения режима 'r' для чтения, 'w' для записи (обрезание файла, если оно уже существует), и 'a' для добавления (что в некоторых системах Unix означает, что все записи добавляются до конца файла, независимо от текущей позиции поиска). Если режим опущен, по умолчанию он равен 'r'. По умолчанию используется текстовый режим, который может преобразовывать символы '\n' в представление, специфичное для платформы, при записи и обратном чтении. Таким образом, при открытии двоичного файла вы должны добавить 'b' к значению режима, чтобы открыть файл в двоичном режиме, что улучшит переносимость. (Добавление 'b' полезно даже в системах, которые не обрабатывают двоичные и текстовые файлы по-разному, где они служат в качестве документации.) См. Ниже для более возможных значений режима.

Режимы 'r+', 'w+' и 'a+' откройте файл для обновления (обратите внимание, что 'w+' обрезает файл). Добавить 'b' в режим, чтобы открыть файл в двоичном режиме, в системах, которые различают двоичные и текстовые файлы; на системах, которые не имеют этого различия, добавление 'b' не имеет эффекта.

Ответ 3

Я понимаю, что добавление r+ открывается как для чтения, так и для записи (точно так же, как w+, хотя, как указано в комментарии, обрезает файл). b просто открывает его в двоичном режиме, который, как предполагается, менее осведомлен о таких вещах, как разделители строк (по крайней мере, на С++).

Ответ 4

В Windows, 'b', добавленный в режим, открывает файл в двоичном режиме, поэтому существуют также такие режимы, как "rb", "wb" и "r + b". Python в Windows делает различие между текстовыми и двоичными файлами; конец строки символы в текстовых файлах автоматически изменяются, когда данные читается или записывается. Эта за кадром модификация данных файла отлично подходит для текстовых файлов ASCII, но itll повреждает двоичные данные, подобные этому в файлах JPEG или EXE. Будьте очень осторожны при использовании двоичного режима при чтении и писать такие файлы. В Unix не помешает добавить "b" в режим, поэтому вы можете использовать его платформу-независимо для всех двоичных файлы.

Источник: Чтение и запись файлов