Ответ 1
r+
используется для чтения и записи. b
для двоичного.
Режим 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"? Почему это работает, когда другие не делают?
r+
используется для чтения и записи. b
для двоичного.
Режим r+b
открывает двоичный файл в режиме чтения или записи.
Здесь вы можете прочитать .
r
открывается для чтения, а r+
открывается для чтения и записи. b
для двоичного.
Это указано в документации:
Наиболее часто используемые значения режима
'r'
для чтения,'w'
для записи (обрезание файла, если оно уже существует), и'a'
для добавления (что в некоторых системах Unix означает, что все записи добавляются до конца файла, независимо от текущей позиции поиска). Если режим опущен, по умолчанию он равен'r'
. По умолчанию используется текстовый режим, который может преобразовывать символы'\n'
в представление, специфичное для платформы, при записи и обратном чтении. Таким образом, при открытии двоичного файла вы должны добавить'b'
к значению режима, чтобы открыть файл в двоичном режиме, что улучшит переносимость. (Добавление'b'
полезно даже в системах, которые не обрабатывают двоичные и текстовые файлы по-разному, где они служат в качестве документации.) См. Ниже для более возможных значений режима.Режимы
'r+'
,'w+'
и'a+'
откройте файл для обновления (обратите внимание, что'w+'
обрезает файл). Добавить'b'
в режим, чтобы открыть файл в двоичном режиме, в системах, которые различают двоичные и текстовые файлы; на системах, которые не имеют этого различия, добавление'b'
не имеет эффекта.
Я понимаю, что добавление r+
открывается как для чтения, так и для записи (точно так же, как w+
, хотя, как указано в комментарии, обрезает файл). b
просто открывает его в двоичном режиме, который, как предполагается, менее осведомлен о таких вещах, как разделители строк (по крайней мере, на С++).
В Windows, 'b', добавленный в режим, открывает файл в двоичном режиме, поэтому существуют также такие режимы, как "rb", "wb" и "r + b". Python в Windows делает различие между текстовыми и двоичными файлами; конец строки символы в текстовых файлах автоматически изменяются, когда данные читается или записывается. Эта за кадром модификация данных файла отлично подходит для текстовых файлов ASCII, но itll повреждает двоичные данные, подобные этому в файлах JPEG или EXE. Будьте очень осторожны при использовании двоичного режима при чтении и писать такие файлы. В Unix не помешает добавить "b" в режим, поэтому вы можете использовать его платформу-независимо для всех двоичных файлы.
Источник: Чтение и запись файлов