Код БарсикОсновы Python
Основы Python›C19 · Теория

Теория · C19

Чтение файлов и папок

Разберись в теме, запусти пример и переходи к самостоятельным задачам.

РАЗБИРАЕМ ПО ШАГАМ

От идеи к работающему коду

Данные могут храниться отдельно от программы в текстовых файлах. Научимся задавать пути, читать UTF-8 и обрабатывать строки, не теряя пустые записи и последние строки файла.

Сразу к запуску примера ↓
Барсик открывает папку и читает документы по одному.
Барсик открывает папку и читает документы по одному.
  1. 1Путь к файлу
  2. 2Чтение текста
  3. 3Обработка строк

1. Путь и рабочая папка

Path из pathlib представляет путь. Относительный путь отсчитывается от текущей рабочей папки запуска, а не обязательно от папки открытого редактора.

В браузере файлы находятся в виртуальной файловой системе интерпретатора. Они не открывают документы твоего компьютера. Для повторяемого примера сначала создадим небольшой учебный файл; настоящий проект запускаем из своей папки локально.

Python
from pathlib import Pathpath = Path("questions.txt")path.write_text("Вопрос 1\n\nВопрос 2\n", encoding="utf-8")print(path.read_text(encoding="utf-8"))

2. Чтение с with

open открывает файл и возвращает файловый объект. with закрывает его при выходе из блока, даже если внутри возникла ошибка. Режим r означает чтение.

encoding="utf-8" задаёт способ преобразования байтов в текст и помогает одинаково читать русские буквы на разных компьютерах. Файл должен быть действительно сохранён в этой кодировке.

Python
from pathlib import PathPath("notes.txt").write_text("Привет, Барсик!", encoding="utf-8")with open("notes.txt", "r", encoding="utf-8") as file:    text = file.read()print(text)

3. Все строки, включая пустые

splitlines разбивает текст на строки без символов перевода строки. Внутренняя пустая строка остаётся отдельным элементом. Последний завершающий перенос сам по себе не добавляет лишнюю запись.

Пустой строкой для статистики договоримся считать строку без непробельных символов: not line.strip(). Срез lines[-5:] безопасно возвращает до пяти последних строк, даже если их меньше.

Python
text = "первая\n\nтретья\n"lines = text.splitlines()empty = 0for line in lines:    if not line.strip():        empty += 1print("Всего:", len(lines))print("Пустых:", empty)print(lines[-5:])

4. Список файлов в папке

glob("*.txt") находит подходящие пути внутри выбранной папки. Сортируем их для предсказуемого меню. is_file отбрасывает папки, если они попали в набор. enumerate(files, start=1) выдаёт пару: номер от 1 и путь к файлу.

Как и в меню списка, номер пользователя проверяем до обращения по индексу. Если файлов нет, показываем сообщение. Ошибки отсутствующего файла научимся обрабатывать через try/except.

Python
from pathlib import Pathfiles = []for path in Path(".").glob("*.txt"):    if path.is_file():        files.append(path)files = sorted(files)for number, path in enumerate(files, start=1):    print(number, path.name)if not files:    print("Текстовых файлов нет")

Где легко ошибиться

  • Искать относительный файл в другой рабочей папке.
  • Не указать кодировку для русскоязычных учебных данных.
  • Удалить пустые строки до того, как их требуется посчитать.
Проверь понимание: Где Python ищет Path("notes.txt")?

В текущей рабочей папке процесса. Её можно узнать через Path.cwd().

Читаем текст как файл

StringIO — текстовый файл в памяти. Он позволяет проверить чтение строк прямо в браузере.

Запусти пример. Затем измени код или входные данные и проверь, как меняется вывод.

Пример входных данных

Ввод не нужен

Ожидаемый вывод

ключ
карта
фонарь
main.pyPython · можно менять код

Подготавливаем редактор…

Загрузка Python…

Каждый ответ — с новой строки.

Твой вывод

Здесь появится результат запуска.

Дальше — самостоятельные задачи

  1. Посчитать все и пустые строки
  2. Показать последние пять строк
  3. Выбрать файл по номеру и прочитать его