Python: Деревья
2026-02-26 20:10 Diff

В этом уроке мы создадим виртуальную (не настоящую) файловую систему и реализуем повседневные операции для работы с ней: подсчет свободного места, поиск файлов и директорий и другие.

Эта файловая система не имеет практического применения, на ней мы будем практиковать навыки работы с древовидными структурами данных.

Как работать с файловой системой

Обработка любых деревьев в сущности не отличается. Файловая система, каталоги товаров, адреса, родственные связи и многое другое — все эти данные можно представить в виде дерева. Подход в работе с каждым типом будет один и тот же. Научившись работать с одним деревом, вы сможете применять эти же знания в работе с другими деревьями.

Вот как выглядит создание дерева виртуальной файловой системы:

В результате получается такая структура:

Вкладывая вызовы mkdir и mkfile в другие mkdir, можно получить любую файловую структуру. Корнем в этой структуре будет директория, а в листьях могут оказаться файлы и пустые директории.

Эта структура виртуальная, то есть реального создания файлов и директорий не происходит. Вся информация о файловой системе находится в переменной tree. Если ее распечатать на экран, то мы увидим следующее содержимое:

Это внутренняя реализация файлового дерева. Она состоит из двух типов узлов: директорий и файлов.

Посмотрим на представление директории:

А теперь изучим представление файла:

У файлов и директорий есть имена — это общая часть. Свойство type определяет тип узла. С его помощью во время обработки этого дерева можно понять, что именно находится перед нами. Еще есть свойство meta — это словарь с произвольными данными, например, размером, или датой создания.

Свойства задаются во время создания узлов:

Метаданные понадобятся функциям, которые анализируют дерево — например, считают занятое место.