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().
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+ открывается для добавления и чтения, позволяя вам как добавлять в файл, так и читать его содержимое