ЯдроКодаподготовка к экзаменам
Учебная платформа

Загружаем материалы

Подготавливаем материалы и навигацию по разделу.

Файлы в Python: чтение и запись текста

Автор: · Обновлено

Файл позволяет сохранить данные между запусками. Конструкция with open открывает ресурс и гарантирует закрытие после выхода из блока, даже если возникла ошибка. Режим r читает существующий файл, w создаёт новый или полностью перезаписывает старый.

Подсчёт непустых строк

Пусть input.txt содержит три строки, средняя из которых пустая.

with open('input.txt', 'r', encoding='utf-8') as source:
    lines = source.readlines()

non_empty = sum(1 for line in lines if line.strip())

with open('output.txt', 'w', encoding='utf-8') as target:
    target.write(str(non_empty))

print(non_empty)

В консоли и output.txt окажется число 2. readlines сохраняет символы перевода строки, а strip используется только для проверки содержимого.

Путь считается от рабочей папки

FileNotFoundError часто означает, что input.txt лежит не в текущей рабочей директории. Выведите путь через модуль pathlib или проверьте терминал, из которого запущена программа. Не путайте расположение исходного файла с автоматически выбранной папкой запуска редактора.

Режим w опасен для существующих данных: содержимое обнуляется при открытии. Для добавления в конец существует a. Всегда указывайте encoding='utf-8' для предсказуемой работы русского текста. Не пытайтесь читать из объекта file после завершения with — он уже закрыт.

Практика с проверяемым файлом

Создайте input.txt с числами по одному в строке. Прочитайте их, найдите сумму и запишите в result.txt строку «Сумма: ...». Проверьте файл из одного числа, отрицательные значения и пустой файл; для пустого ожидается ноль. После запуска откройте result.txt и убедитесь, что повторный запуск в режиме w не дублирует строку.

Файл как внешний ресурс

Проведите два запуска программы записи: сначала в режиме w, затем в a. Перед каждым предскажите содержимое файла и после прочитайте его обратно. Добавьте перевод строки явно, чтобы записи не склеились. Затем переименуйте входной файл и обработайте FileNotFoundError на уровне пользовательского сценария, не окружая try всем кодом. Через pathlib.Path проверьте существование и выведите абсолютный путь для диагностики. Завершите эксперимент временным файлом с русским текстом, подтверждая UTF-8. В отчёте разделите ошибки данных, пути и выбранного режима открытия.

Практикум: файл с явной кодировкой и контекстом

Запишите три русские строки в файл с encoding="utf-8", затем прочитайте их целиком и построчно. Используйте with, после блока проверьте, что работа с закрытым файлом вызывает ошибку. Сравните режимы w и a на копии данных: первый перезаписывает содержимое, второй добавляет. Подготовьте пустой файл и последнюю строку без перевода. Для подсчёта непустых строк удаляйте только нужные символы и не теряйте внутренние пробелы.

Контрольная точка

Какие ресурсы освобождает контекстный менеджер даже при ошибке внутри блока? Объясните, почему закрытие файла важно не только для чтения, но и для гарантированной записи буфера.

Частые вопросы

Почему стоит указывать encoding явно?

Кодировка по умолчанию зависит от окружения. Явный UTF-8 делает файл переносимым и предотвращает ситуацию, когда программа работает на одном компьютере, но не может прочитать те же символы на другом.

Источники