Создание и настройка директорий в Python: рекурсивно

Пройдите тест, узнайте какой профессии подходите

Я предпочитаю
0%
Работать самостоятельно и не зависеть от других
Работать в команде и рассчитывать на помощь коллег
Организовывать и контролировать процесс работы

Быстрый ответ

Для рекурсивного создания директорий в Python применяются функция os.makedirs() с параметром exist_ok=True. Таким образом вы можете создавать папки, не опасаясь получить исключение, если папка уже существует:

Python
Скопировать код
import os

# Например, вы хотите создать виртуальный домик на дереве
os.makedirs('желаемый/путь/к/домику', exist_ok=True)
Кинга Идем в IT: пошаговый план для смены профессии

Альтернативный подход: pathlib

С появлением модуля pathlib в Python 3.4 стал доступен более высокоуровневый, объектно-ориентированный подход к работе с файловой системой. Он позволяет сделать то же, что и предыдущий пример, но с использованием pathlib:

Python
Скопировать код
from pathlib import Path

# Указываем путь к создаваемому уголку
Path('желаемый/путь/к/домику').mkdir(parents=True, exist_ok=True)

Погружаемся глубже: использование модулей os и subprocess

Стандартные модули Python os и subprocess помогают при работе с правами доступа или в случае необходимости выполнения команд оболочки. К примеру, os может позволить изменять права доступа и владельца, а subprocess – исполнять команды оболочки:

Python
Скопировать код
import os
import subprocess

# Права 0o755 дают полный доступ владельцу и права на чтение и выполнение всем остальным
os.makedirs('желаемый/путь', mode=0o755, exist_ok=True)

# Выполняем команды оболочки при помощи subprocess
subprocess.run(['mkdir', '-p', 'путь']) 
subprocess.run(['chmod', '-R', '755', 'путь'])

# Помните о безопасности: важно проверять входные данные при работе с командами оболочки

Создаем нашу собственную функцию

Могут возникнуть ситуации, когда требуется специфическая логика создания директорий. Давайте рассмотрим пример такой функции:

Python
Скопировать код
import os

def custom_directory_creator(path):
    if not os.path.exists(path):
        os.makedirs(path)
    else:
        print(f"Директория {path} уже существует. Её можно использовать для хранения файлов!")

# Пример вызова функции
custom_directory_creator('желаемый/путь')

Эта функция проверяет наличие директории, прежде чем создать её. Вы можете модифицировать эту функцию в соответствии с вашими запросами.

Визуализация

Рекурсивное создание директорий можно представить как цифровой дом на дереве с несколькими уровнями. Ниже представлен пример визуализации с применением ASCII-арт:

Markdown
Скопировать код
🌳
├── 🏠 Комната 1 (основная директория)
│   ├── 📦 Подкомната 1 (поддиректория)
│   │   └── 🕹 Геймер-зона (вложенная поддиректория)
│   └── 🔭 Обсерватория (ещё одна поддиректория)
└── 🍃 Листопад (дополнительная директория)

При помощи os.makedirs мы можем создать каждый уровень нашей структуры, начиная с самого верхнего:

Python
Скопировать код
os.makedirs('Комната 1/Подкомната 1/Геймер-зона')

И вот, у вас имеется виртуальный дом на дереве! 🚀

Дополнительные возможности pathlib

Модуль pathlib предлагает больше, чем просто создание директорий. Он также включает методы для работы с файлами и проверки существования директорий:

Python
Скопировать код
from pathlib import Path

# Создаем объект пути
path = Path('желаемый/путь/к/домику')
# Проверяем наличие директории
if not path.is_dir():
    path.mkdir(parents=True, exist_ok=True)

Ошибки, которых следует избегать

Обратите внимание на состояния гонки файловой системы. Ошибка может возникнуть, если папка создается другим процессом после проверки на существование, но до самого создания. Чтобы предотвратить это, используйте exist_ok=True.

Не рекомендуется использовать os.mkdir() без параметра exist_ok=True или проверки существования директории. Это может вызвать ошибку FileExistsError, если директория уже была создана.

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

Полезные материалы

  1. os — Разнообразные интерфейсы операционной системы — Документация Python 3.12.2 — Официальная документация Python о функции os.makedirs.
  2. 7. Ввод и вывод — Документация Python 3.12.2 — Вы найдете информацию о чтении и записи файлов в Python.
  3. Работа с файлами в Python – Real Python — Практическое руководство по работе с файлами в Python.
  4. pathlib — Объектно-ориентированные пути файловой системы — Документация Python 3.12.2 — Современный подход к файловым путям в Python.
  5. Создание директорий в Python – GeeksforGeeks — Отличное руководство по управлению директориями.
  6. Ограничение доступа к путям для предотвращения перемещения по путям — Советы по безопасности OpenStack 0.0.1.dev265 — Руководство по обеспечению безопасности файловых путей.
  7. Часто задаваемые вопросы по программированию — Документация Python 3.12.2 — Здесь вы найдете вопросы и ответы о создании директорий и работе с файлами.