Зарегистрируйтесь для доступа к 15+ бесплатным курсам по программированию с тренажером

Виртуальная файловая система Python: Деревья

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

from hexlet import fs

# mkdir вторым параметром принимает список детей,
# которые могут быть либо директориями, созданными mkdir,
# либо файлами, созданными mkfile
tree = fs.mkdir('etc', [
    fs.mkfile('bashrc'),
    fs.mkdir('consul', [
        fs.mkfile('config.json'),
    ]),
])

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

etc
├── bashrc
└── consul
    └── config.json

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

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

{
  'name': 'etc',
  'type': 'directory',
  'meta': {},
  'children': [
    {
      'name': 'bashrc',
      'type': 'file',
      'meta': {},
    },
    {
      'name': 'consul',
      'type': 'directory',
      'meta': {},
      'children': [
        {
          'name': 'config.json',
          'type': 'file',
          'meta': {},
        }
      ],
    },
  ],
}

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

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

{
  'name': 'dir_name',
  'type': 'directory',
  'children': [], # Здесь хранятся дети
  'meta': {} # Свойства директории
}

Представление файла:

{
  'name': 'file_name',
  'type': 'file',
  'meta': {}, # Свойства файла
}

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

mkfile('.bashrc', {'size': 75})
mkdir('hexlet', [], {'owner': 'nobody'})

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


Дополнительные материалы

  1. Документация python-immutable-fs-trees

Аватары экспертов Хекслета

Остались вопросы? Задайте их в разделе «Обсуждение»

Вам ответят команда поддержки Хекслета или другие студенты.

Для полного доступа к курсу нужен базовый план

Базовый план откроет полный доступ ко всем курсам, упражнениям и урокам Хекслета, проектам и пожизненный доступ к теории пройденных уроков. Подписку можно отменить в любой момент.

Получить доступ
900
упражнений
2000+
часов теории
3200
тестов

Открыть доступ

Курсы программирования для новичков и опытных разработчиков. Начните обучение бесплатно.

  • 130 курсов, 2000+ часов теории
  • 900 практических заданий в браузере
  • 360 000 студентов
Даю согласие на обработку персональных данных, соглашаюсь с «Политикой конфиденциальности» и «Условиями оказания услуг»

Наши выпускники работают в компаниях:

Логотип компании Альфа Банк
Логотип компании Aviasales
Логотип компании Yandex
Логотип компании Tinkoff
Рекомендуемые программы

С нуля до разработчика. Возвращаем деньги, если не удалось найти работу.

Иконка программы Python-разработчик
Профессия
Разработка веб-приложений на Django
30 июня 10 месяцев

Используйте Хекслет по максимуму!

  • Задавайте вопросы по уроку
  • Проверяйте знания в квизах
  • Проходите практику прямо в браузере
  • Отслеживайте свой прогресс

Зарегистрируйтесь или войдите в свой аккаунт

Даю согласие на обработку персональных данных, соглашаюсь с «Политикой конфиденциальности» и «Условиями оказания услуг»