Помимо режимов открытия файлов “w” и “r” (по умолчанию) большинством платформ поддерживается строка режима открытия “а”, означающая «append» (дополнение). В этом режиме вывода методы записи добавляют данные в конец файла, и вызов функции open не уничтожает текущее содержимое файла:
>>> file = open(‘data.txt’, ‘a’) # для дополнения: содержимое не стирается
>>> file.write(‘The Life of Brian’) # добавит в конец существующих данных
>>> file.close()
>>>
>>> open(‘data.txt’).read() # открыть и прочитать весь файл
‘Hello file world!\nBye file world.\nThe Life of Brian’
Хотя в большинстве случаев для открытия файлов применяются уже рассмотренные нами формы вызовов, но кроме того, функция open может принимать дополнительные аргументы, позволяющие более точно определить потребности обработки файла. Чаще всего в практике используются первые три аргумента — имя файла, режим открытия и размер буфера. Все они, кроме первого, являются необязательными: если они опущены, принимается режим открытия по умолчанию “r” (ввод) и разрешается полная буферизация. Ниже приводятся некоторые сведения об этих трех аргументах функции open, которые вам следует знать:
Имя файла
Как уже говорилось, имена файлов могут включать путь к каталогу, что дает возможность ссылаться на файлы, находящиеся на компьютере в произвольном месте; если полный путь в имени файла отсутствует, считается, что путь к файлам указывается относительно текущего рабочего каталога (который описывался в предыдущей главе). В целом, любой формат имени файла, который можно ввести в системной оболочке, можно использовать и в вызове функции open. Например, аргумент имени файла r’..\temp\spam.txt’ в Windows соответствует файлу spam.txt в подкаталоге temp, находящемся в родительском каталоге текущего рабочего каталога, — на один шаг вверх и затем вниз в каталог temp.
Режим открытия
Функция open может принимать и другие режимы, часть из которых мы увидим далее в этой главе, “r+”, “w+” и “a+”, которые используются, чтобы открыть файл для чтения и записи, и “b” — для обозначения двоичного режима. В частности, режим “r+” означает, что файл доступен как для чтения, так и для записи, при этом содержимое существующих файлов сохраняется; “w+”, позволяет выполнять операции чтения и записи, но создает файл заново, уничтожая прежнее его содержимое; режимы “rb” и “wb” разрешают читать и записывать данные в двоичном режиме без выполнения автоматических преобразований; наконец, режимы “wb+” и “r+b” объединяют возможность чтения и записи с двоичным режимом. Проще говоря, по умолчанию используется режим для чтения “r”, но вы можете использовать режим “w” для записи и “a” для дополнения, можете добавлять символ +, чтобы обеспечить возможность изменения содержимого файла, а также указывать b и t, чтобы задать двоичный или текстовый режим. Порядок следования спецификаторов в строке режима не имеет значения.
Как будет показано ниже в этой главе, режимы со спецификатором + часто используются совместно с методом seek, обеспечивающим возможность произвольного доступа к файлам. Независимо от режима содержимым файлов в программах Python всегда являются строки — методы чтения возвращают строку, и строку мы передаем методам записи. Однако тип используемой строки зависит от выбранного режима: str — для текстового режима, и bytes или другие типы строк байтов — для двоичного режима.
Размер буфера
Функция open также принимает необязательный третий аргумент с размером буфера, позволяющий управлять буферизацией файла — способом размещения данных в очереди, позволяющим повысить производительность. Значение 0 в этом аргументе означает отсутствие буферизации (данные передаются немедленно, но это значение допустимо только для двоичных режимов), значение 1 означает построчную буферизацию, а любое другое положительное число означает использование режима полной буферизации (который используется по умолчанию, если третий аргумент отсутствует в вызове функции).
Как обычно, полные сведения о дополнительных аргументах функции open, помимо этих трех, вы найдете в руководстве по библиотеке языка Python и в справочных изданиях. Например, функция open может принимать дополнительные аргументы, управляющие поведением отображения конца файла и определяющие кодировку символов, автоматически применяемую к содержимому текстовых файлов. Обе эти концепции будут обсуждаться в следующем разделе, поэтому двинемся дальше.
Использованная литература:
Марк Лутц — Программирование на Python, 4-е издание, I том, 2011