Глава 15 · Python и файлы

Зачем нужны файлы?

Переменные исчезают вместе с программой — файлы позволяют сохранить данные надолго.

Куда пропадают переменные?

Небольшая программа:

schet_igry.py
score = 1200
player = "Anna"

print(score)

Программа заканчивается. Где теперь score и player? Запустите программу ещё раз — она снова начнёт со значения score = 1200, как будто предыдущего запуска не было.

Точная формулировка
Не «всё в памяти мгновенно стирается» — а точнее: следующий запуск программы не наследует автоматически объекты Python из предыдущего процесса. Пока программа выполняется, её объекты живут в памяти запущенного процесса; когда процесс завершается, эта память освобождается операционной системой.
RAM · память процесса
score = 1200
player = "Anna"
программа завершается
файловая система
без сохранения — ничего
Без сохранения в файл состояние программы не переживает её завершение.

Чтобы данные пережили завершение программы — список результатов игры, текст, настройки — их нужно записать в файл на диске (или другом постоянном хранилище) и прочитать обратно при следующем запуске.

Что такое файл?

Файл — это именованный набор данных, который хранится в файловой системе.

Чтобы программа могла открыть нужный файл, ей нужно указать, где этот файл находится. Для этого используется путь к файлу — запись, которая показывает его расположение среди папок и файлов. Например:

primer_puti.py
# data/results.txt

Здесь data — это папка, а results.txt — файл внутри неё.

Путь — это адрес файла
Для первого знакомства путь можно представить как адрес файла в файловой системе — так же, как адрес дома помогает найти его среди улиц и номеров. Это лишь сравнение для интуиции: путь — это текстовая запись, а не физический адрес в памяти компьютера. Абсолютные и относительные пути подробно разберём в разделе 15.6.

В конечном счёте содержимое файла представлено байтами. Если файл содержит текст, Python должен знать, как преобразовать эти байты в символы и обратно. Правило такого преобразования называется кодировкой — подробно поговорим об этом в разделе 15.16, вместе с различием str и bytes.

Открытие и чтение существующих файлов

chtenie_fajla.py
file = open("privet.txt", "r", encoding="utf-8")   # "r" — режим чтения (read)
content = file.read()
print(content)
file.close()   # обязательно закрыть файл после работы
Не забывайте file.close()
Незакрытый файл может не сохранить изменения на диск или заблокировать доступ к нему для других программ. Забыть close() — очень частая ошибка новичков.

Современный способ: with

Ручное закрытие → менеджер контекста with
Классический подход
file = open("privet.txt", "r", encoding="utf-8")
content = file.read()
print(content)
file.close()   # легко забыть!
Современный Python (with)
with open("privet.txt", "r", encoding="utf-8") as file:
    content = file.read()
    print(content)
# файл закроется САМ, даже если внутри блока произойдёт ошибка
Что использовать сегодня: with — он существует в Python с версии 2.5, так что дело не в новизне, а в надёжности: файл закроется автоматически при выходе из блока with, даже если внутри что-то пойдёт не так. Начиная с этой главы в книге мы используем именно with и всегда указываем encoding="utf-8" явно (подробнее — в 15.16).
Практика: чтение файлов через with
Интерактивный ноутбук прямо в браузере — Python 3.14 через Pyodide, без установки
Открыть практику →