Шаг 83.
Python: сборник рецептов.
Файлы и ввод-вывод. Запись в файл, которого еще нет

    На этом шаге мы рассмотрим способы решения этой задачи.

Задача

    Вы хотите записать данные в файл, но только в том случае, если его еще нет в файловой системе.

Решение

    Эта задача легко решается с помощью использования малоизвестного режима x работы open() (вместо обычного режима w):

>>> with open('somefile', 'wt') as f:
	f.write('Hello\n')
>>> with open('somefile', 'xt') as f:
	f.write('Hello\n')
Traceback (most recent call last):
   .   .   .   .
FileExistsError: [Errno 17] File exists: 'somefile'
>>>

    Если файл в бинарном режиме, используйте режим xb вместо xt.

Обсуждение

    Этот рецепт демонстрирует удивительно элегантное решение проблемы, иногда возникающей при записи в файлы (например, случайной перезаписи существующего файла). Альтернативное решение - предварительная проверка:

>>> import os
>>> if not os.path.exists('somefile'):
	with open('somefile', 'wt') as f:
	f.write('Hello\n')
    else:
	print('File already exists!')


File already exists!
>>>

    Очевидно, что использование режима x намного проще. Важно отметить, что режим x доступен для функции open() только в Python 3.x. Этот режим не существовал в ранних версиях Python или низкоуровневневых библиотеках на языке C, использованных в реализации Python.

    На следующем шаге мы рассмотрим выполнение операций ввода-вывода над строками.




Предыдущий шаг Содержание Следующий шаг