Финал блока — момент, когда программа впервые выходит за пределы одного запуска и начинает сохранять или читать что-то реальное с диска, применяя сразу структуры данных (глава 17) и работу с текстом (глава 18).
| Режим | Значение |
|---|---|
| 'r' | Чтение (по умолчанию) — файл должен существовать |
| 'w' | Запись — полностью перезаписывает файл, если он уже существовал |
| 'a' | Добавление в конец существующего файла, не стирая содержимое |
| 'x' | Создание нового файла — ошибка, если файл уже существует |
Открытие существующего важного файла в режиме 'w' вместо 'r'
или 'a' мгновенно и безвозвратно стирает его прежнее содержимое, ещё до
того, как в него будет что-то записано, — точно так же незаметно и без подтверждения,
как удаление файла командой rm из главы 09. Стоит явно проверять, какой
режим действительно нужен, прежде чем открывать файл, с которым не хочется случайно
расстаться.
Конструкция with ... as f: гарантированно закрывает файл после выхода из
блока — даже если внутри блока возникнет ошибка (тема главы 21). Без with
пришлось бы вручную вызывать f.close(), и легко забыть об этом, особенно если
программа завершается раньше времени из-за исключения — файл остался бы "подвешен"
открытым.
Явное указание encoding="utf-8" при открытии файла говорит Python, как именно
превращать байты файла на диске обратно в текст (глава 03). Если реальная кодировка файла
отличается от указанной, попытка чтения может завершиться ошибкой
UnicodeDecodeError (подробнее об обработке ошибок — глава 21) — та же
проблема "кракозябр", что уже разбиралась в главе 03, только теперь в виде конкретной
ошибки Python, а не визуально испорченного текста в текстовом редакторе.
Прямая итерация по файлу построчно (последний вариант) предпочтительнее
.readlines() для больших файлов — она не загружает весь файл в память сразу,
а обрабатывает по одной строке за раз.
Обрати внимание — .write() не добавляет перевод строки автоматически, в
отличие от print(), — нужно явно включать \n (глава 18) там, где
он нужен.
Этот пример прямо объединяет главы 17–19: чтение файла построчно, разбор строки методом
.split() (глава 18), сборка результата в уже знакомый шаблон "список словарей"
(глава 17). Это ровно та практика, что подробно разовьётся в главе 23 применительно к
настоящим скриптам автоматизации.
Прежде чем открывать файл, часто полезно убедиться, что он вообще существует — модуль
os (или более современный pathlib) даёт для этого готовые
инструменты, подробно разбираемые в главе 22, посвящённой работе с файловой системой
напрямую из Python.
Семь глав дали полный базовый набор языка: от установки и первого скрипта через переменные, условия, циклы, функции, структуры данных, строки — до файлов. Следующий блок переводит этот набор из теории в практику — модули, обработка ошибок и настоящие скрипты автоматизации.
Книга бесплатна для чтения. Автор — Тариел Бежанидзе, компьютерный мастер в Батуми · tariel.ge · все бесплатные книги. Копировать текст целиком на другие сайты — только со ссылкой на источник.