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

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

В этом уроке мы изучим неизменяемую структуру. Именно она выбрана для этого курса неслучайно. Такую структуру легче отлаживать и меньше шансов допустить ошибки. И она позволяет максимально погрузиться в использование функций высшего порядка.

Базовые операции с узлами

В пакете python-immutable-fs-trees есть набор функций для работы с уже созданными файлами и директориям. Они позволяют не лезть во внутреннюю структуру самого дерева:

Дополнительно в пакете есть две функции для проверки типа. С их помощью можно выборочно работать с файлами и директориями:

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

Обработка

Любая обработка в неизменяемом стиле сводится к формированию новых данных на основе старых. Ниже мы реализуем некоторые варианты преобразования, раскрывающие эту идею.

Изменение имени файла

Фактически можно создать новый файл с метаданными старого:

Перед созданием нового файла метаданные клонируются глубоким клонированием. Так происходит, потому что словари передаются по ссылке. Если не выполнить клонирование, то в метаданных нового файла окажутся метаданные старого.

Как только мы захотим внести изменения в новое, мы сломаем старое:

Сортировка содержимого директории

Также данные внутри директории можно отсортировать:

Обновление содержимого директории

Еще мы можем обновить содержимое директории:

Удаление файлов внутри директории

Кроме того, файлы можно удалять: