Вопрос-Ответ

Difference between modes a, a+, w, w+, and r+ in built-in open function?

Разница между режимами a, a +, w, w + и r + во встроенной открытой функции?

Во встроенной функции open python в чем точная разница между режимами w, a, w+, a+ и r+?

В частности, документация подразумевает, что все они позволят выполнять запись в файл, и говорит, что это открывает файлы для "добавления", "записи" и "обновления" конкретно, но не определяет, что означают эти термины.

Переведено автоматически
Ответ 1

Режимы открытия точно такие же , как и для функции стандартной библиотеки C fopen().

В BSD fopen manpage они определяются следующим образом:

 The argument mode points to a string beginning with one of the following
sequences (Additional characters may follow these sequences.):

``r'' Open text file for reading. The stream is positioned at the
beginning of the file.

``r+'' Open for reading and writing. The stream is positioned at the
beginning of the file.

``w'' Truncate file to zero length or create text file for writing.
The stream is positioned at the beginning of the file.

``w+'' Open for reading and writing. The file is created if it does not
exist, otherwise it is truncated. The stream is positioned at
the beginning of the file.

``a'' Open for writing. The file is created if it does not exist. The
stream is positioned at the end of the file. Subsequent writes
to the file will always end up at the then current end of file,
irrespective of any intervening fseek(3) or similar.

``a+'' Open for reading and writing. The file is created if it does not
exist. The stream is positioned at the end of the file. Subse-
quent writes to the file will always end up at the then current
end of file, irrespective of any intervening fseek(3) or similar.
Ответ 2

Я заметил, что время от времени мне нужно снова запускать Google fopen, просто чтобы создать мысленный образ того, в чем заключаются основные различия между режимами. Итак, я подумал, что в следующий раз диаграмма будет читаться быстрее. Возможно, кому-то еще это тоже покажется полезным.

Ответ 3

Та же информация, только в виде таблицы

                  | r   r+   w   w+   a   a+
------------------|--------------------------
read | + + + +
write | + + + + +
write after seek | + + +
create | + + + +
truncate | + +
position at start | + + + +
position at end | + +

где значения:
(просто чтобы избежать неправильного толкования)


  • чтение - разрешено чтение из файла



  • запись - запись в файл разрешена



  • создать - файл создается , если он еще не существует



  • truncate - при открытии файла он становится пустым (все содержимое файла стирается)



  • позиция при запуске - после открытия файла начальная позиция устанавливается в начало файла



  • позиция в конце - после открытия файла начальная позиция устанавливается в конец файла



Примечание: a и a+ всегда добавлять в конец файла - игнорирует любые seek перемещения.
Кстати. интересное поведение, по крайней мере, на моем win7 / python2.7, для нового файла, открытого в a+ режиме:

write('aa'); seek(0, 0); read(1); write('b') - second write игнорируется

write('aa'); seek(0, 0); read(2); write('b') - второй write вызывает IOError

Ответ 4

Параметры те же , что и для функции fopen в стандартной библиотеке C:

w усекает файл, перезаписывая все, что там уже было.

a добавляется к файлу, дополняя то, что уже было там

w+ открывается для чтения и записи, усекая файл, но также позволяя вам прочитать обратно то, что было записано в файл

a+ открывается для добавления и чтения, позволяя вам как добавлять в файл, так и читать его содержимое

python