Python для новичковСтроки, модули и файлыЗапись в текстовый файл

Запись в текстовый файл

Уроки курсаЗапись в текстовый файл

В прошлом уроке ты открывал файлы в режиме 'r' и читал содержимое — конструкция with open(...) as f уже знакома. Сейчас меняется только режим: вместо чтения будем писать. И вот здесь сразу возникает выбор, который определяет, что произойдёт с файлом в момент открытия.

Режимы записи 'w' и 'a': перезапись и дозапись

Когда открываешь файл для записи, Python смотрит на второй аргумент функции open() — строку режима. Для записи используются два основных варианта: 'w' и 'a'. Они похожи внешне, но ведут себя принципиально по-разному.

Режим 'w' — перезапись. Как только Python выполняет open('log.txt', 'w'), файл очищается немедленно — ещё до того, как ты вызовешь хоть один метод записи. Если файл существовал и в нём были данные, они безвозвратно удаляются. Если файл не существовал — он создаётся пустым. После этого ты пишешь в чистый файл с нуля.

Режим 'a' — дозапись (append). При открытии файл не трогается: существующее содержимое остаётся нетронутым, а курсор записи встаёт в самый конец. Всё, что ты запишешь, добавится после последней строки. Если файл не существовал — он тоже создаётся, как и в режиме 'w'.

Разница критична на практике. Представь, что log.txt уже содержит записи за прошлый сеанс:

# Режим 'w' — ОСТОРОЖНО: все предыдущие записи будут уничтожены
with open('log.txt', 'w', encoding='utf-8') as f:
    f.write('Новый сеанс\n')
# log.txt теперь содержит только одну строку — предыдущие данные стёрты

# Режим 'a' — предыдущие записи сохраняются
with open('log.txt', 'a', encoding='utf-8') as f:
    f.write('Новый сеанс\n')
# log.txt содержит всё, что было раньше, плюс эта строка в конце

Главная ловушка режима 'w' в том, что файл стирается в момент открытия, а не в момент записи. Это значит: даже если программа упадёт с ошибкой сразу после open(), не записав ничего, старый файл уже потерян. Поэтому 'w' используют осознанно — когда нужно создать файл заново или перезаписать его целиком. Для накопления данных между запусками правильный выбор — 'a'.