На этом шаге мы рассмотрим способы решения этой задачи.
Вы хотите записать данные в файл, но только в том случае, если его еще нет в файловой системе.
Эта задача легко решается с помощью использования малоизвестного режима 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.
На следующем шаге мы рассмотрим выполнение операций ввода-вывода над строками.