Глава 15 · Python и файлы
Большие файлы и потоковая обработка
Способ чтения файла — это решение, которое должно учитывать его размер.
Размер файла
razmer_fajla.py
from pathlib import Path
path = Path("spisok.txt")
print(path.stat().st_size, "байт")
Размер в байтах — не длина текста
.stat().st_size — это размер в байтах на диске, а не количество символов. Для текста в UTF-8 с кириллицей или эмодзи эти числа, как мы видели в разделе 15.17, обычно не совпадают.Маленький файл vs большой файл
Выбор способа чтения по размеру файла
Файл заведомо небольшой (настройки, короткая заметка)
→
read_text() / read() целиком — просто и понятно
Файл может быть очень большим (журнал, лог за год)
→
построчная обработка — цикл for line in file
readlines() на действительно большом файле
Файл в 1 гигабайт логов — плохой повод для
readlines(): весь список строк придётся держать в памяти одновременно. Построчный цикл for line in file обрабатывает файл по одной строке, не накапливая их все сразу.Чуть глубже: чтение бинарных данных порциями
Для очень больших бинарных файлов иногда читают не всё сразу, а порциями (chunks) фиксированного размера:
chunked_read.py
with open("bolshoy_fajl.bin", "rb") as f:
while True:
chunk = f.read(8192) # порция по 8192 байта
if not chunk:
break
# обработать chunk здесь
Это необязательный, более глубокий материал — для большинства учебных и небольших прикладных задач построчного чтения текста достаточно.
Мини-проект: анализатор текстового файла
Посчитаем строки, слова и символы файла потоково — без загрузки всего файла в память сразу как единой строки:
analizator_fajla.py
from pathlib import Path
def analiz_fajla(path: Path) -> dict[str, int]:
stroki = 0
slova = 0
simvoly = 0
with path.open("r", encoding="utf-8") as f:
for line in f:
stroki += 1
slova += len(line.split())
simvoly += len(line)
return {"строки": stroki, "слова": slova, "символы": simvoly}
print(analiz_fajla(Path("spisok.txt")))
★★ Самостоятельная задача
Байты отдельно
Добавьте в отчёт четвёртое число — размер файла в байтах через .stat().st_size — и сравните его с количеством символов.
Практика: большие файлы и анализатор текста
Интерактивный ноутбук прямо в браузере — Python 3.14 через Pyodide, без установки