
Операции с файловой системой – фундаментальная задача при разработке утилит, автоматизации процессов и создании backend-приложений. В Python эта задача решается средствами стандартной библиотеки, без необходимости установки сторонних пакетов. Ключевой модуль – os, дополнительно стоит рассмотреть pathlib из-за его более современной и объектно-ориентированной структуры.
Для создания папки используется функция os.mkdir() или метод Path.mkdir(). Первый вариант совместим с ранними версиями Python (до 3.4), второй – предпочтителен в новых проектах, благодаря читаемости и расширенному функционалу. Например, Path(«путь/к/папке»).mkdir(parents=True, exist_ok=True) позволяет рекурсивно создать вложенные директории и избежать ошибки при повторном запуске скрипта.
Важно учитывать, что при попытке создать уже существующую папку os.mkdir() вызовет исключение FileExistsError. Обработка ошибок с помощью конструкции try-except позволяет сделать код более устойчивым. Также рекомендуется использовать абсолютные пути через os.path.abspath() или Path.resolve() для избежания неоднозначностей при запуске из разных директорий.
Создание директорий – это не просто вызов функции. Это точка интеграции с системой прав доступа, структурой проекта и логикой обработки ошибок. Поэтому следует чётко определять, где, зачем и при каких условиях создаётся папка, особенно при работе в многопоточном или серверном окружении.
Создание одной папки с использованием os.mkdir()

Функция os.mkdir() позволяет создать новую папку по заданному пути. Этот метод не создает вложенные директории и вызовет ошибку, если указанный путь уже существует или не существует родительская директория.
Для использования необходимо импортировать модуль os. Пример создания папки:
import os
os.mkdir("новая_папка")
Если нужно указать абсолютный путь, используйте os.path.join() для кроссплатформенной совместимости:
import os
путь = os.path.join("C:", "пользователи", "папка")
os.mkdir(путь)
При попытке создать уже существующую папку возникнет исключение FileExistsError. Чтобы избежать ошибки, рекомендуется предварительно проверять наличие папки:
import os
имя = "папка_логов"
if not os.path.exists(имя):
os.mkdir(имя)
Папка создается с правами по умолчанию, зависящими от операционной системы. Для задания прав доступа используйте mode в качестве второго аргумента, например: os.mkdir("tmp", 0o755).
Проверка существования папки перед созданием
Перед созданием новой директории необходимо убедиться, что папка с таким именем ещё не существует. Это предотвратит возникновение ошибки FileExistsError при использовании функции os.mkdir().
Для проверки используется функция os.path.exists(path), которая возвращает True, если объект по указанному пути существует. В сочетании с os.mkdir() можно реализовать безопасное создание:
import os
folder_path = 'путь/к/папке'
if not os.path.exists(folder_path):
os.mkdir(folder_path)
Если требуется создать вложенные директории, целесообразно использовать os.makedirs(), при этом рекомендуется передать аргумент exist_ok=True для предотвращения ошибок при существовании пути:
import os
folder_path = 'путь/к/вложенной/папке'
os.makedirs(folder_path, exist_ok=True)
Разница между этими подходами:
| Метод | Создание вложенных папок | Обработка существующей папки |
|---|---|---|
os.mkdir() |
Нет | Ошибка |
os.makedirs() |
Да | Нет ошибки при exist_ok=True |
Для надёжности проверку следует выполнять при работе с пользовательскими или динамически формируемыми путями. Это снижает вероятность сбоя выполнения скрипта в многопоточном или многопроцессном окружении.
Создание вложенных папок с помощью os.makedirs()
Функция os.makedirs() позволяет создать сразу несколько уровней вложенных директорий. Если какая-либо из указанных папок уже существует, исключения не возникнет, если задать параметр exist_ok=True.
Синтаксис: os.makedirs(путь, exist_ok=False). Путь может включать несколько уровней, например: "папка1/папка2/папка3". Без exist_ok=True попытка создать уже существующую структуру вызовет FileExistsError.
Пример создания структуры:
import os
os.makedirs("проекты/2025/май", exist_ok=True)
Функция автоматически создаст все отсутствующие директории по указанному пути. Это удобно при работе с логами, временными данными или организацией файлов по датам.
Путь может быть как абсолютным, так и относительным. Используйте os.path.join() для кросс-платформенной совместимости, особенно в проектах, которые будут работать как на Windows, так и на Unix-системах.
base_dir = "архив"
sub_dir = os.path.join(base_dir, "2024", "отчёты")
os.makedirs(sub_dir, exist_ok=True)
Для проверки существования директории перед созданием можно использовать os.path.isdir(), но это не требуется при exist_ok=True. Это делает os.makedirs() предпочтительным выбором для автоматизированных скриптов, где важна устойчивость к повторным вызовам.
Обработка ошибок при создании папок

При создании папки с помощью Python через os.makedirs() или os.mkdir() возможны различные исключения. Их необходимо обрабатывать, чтобы избежать сбоев в работе скрипта и получить контроль над нештатными ситуациями.
Если указанный путь уже существует, os.mkdir() вызовет FileExistsError. Чтобы избежать этого, используйте os.makedirs(path, exist_ok=True). Параметр exist_ok=True предотвратит выброс исключения при наличии целевой директории.
Отсутствие прав на создание каталога приводит к PermissionError. В этом случае важно не только вывести сообщение об ошибке, но и записать его в лог для последующего анализа. Используйте модуль logging, чтобы не потерять информацию об ошибке.
Если путь содержит недопустимые символы (например, ?, * или | в Windows), возникнет OSError с указанием причины. Перед созданием директории проверяйте путь на соответствие допустимому формату с учётом ОС.
Создание вложенных директорий в несуществующих путях с os.mkdir() вызывает FileNotFoundError. В таких случаях предпочтительнее использовать os.makedirs(), который создаёт все промежуточные папки.
Для надёжной работы используйте конструкцию try...except, в которой обрабатываются только ожидаемые исключения. Избыточное использование except Exception снижает предсказуемость кода и затрудняет отладку.
Использование pathlib для создания директорий

Модуль pathlib появился в Python 3.4 и предоставляет объектно-ориентированный подход к работе с файловой системой. Для создания директорий рекомендуется использовать метод Path.mkdir().
- Импортируйте класс
Pathиз модуляpathlib:
from pathlib import Path
- Создание одной директории в текущем каталоге:
Path("новая_папка").mkdir()
- Если директория уже существует, будет вызвано исключение
FileExistsError. Чтобы избежать ошибки, используйте параметрexist_ok=True:
Path("новая_папка").mkdir(exist_ok=True)
- Для создания вложенных директорий применяйте
parents=True:
Path("путь/к/папке").mkdir(parents=True, exist_ok=True)
parents=Trueпозволяет создать всю цепочку директорий, если какая-либо из них отсутствует.exist_ok=Trueпредотвращает выброс исключения, если папка уже существует.
Путь можно формировать динамически, объединяя сегменты через оператор /:
base = Path("папка")
новый_путь = base / "подпапка"
новый_путь.mkdir(parents=True, exist_ok=True)
Проверка существования директории перед созданием не требуется, если установлен exist_ok=True.
pathlib обеспечивает более читаемый и безопасный код по сравнению с os, особенно при работе с путями на разных операционных системах.
Создание папок с правами доступа (permissions)
Для создания папки с заданными правами доступа в Python используется функция os.mkdir() или os.makedirs() в сочетании с параметром mode. Параметр mode позволяет задать права доступа к папке, определяя, кто и какие действия может выполнять с этой папкой.
Стандартный формат для задания прав – это восьмеричное число, где каждая цифра указывает на права для владельца, группы и остальных пользователей. Например, значение 0o755 означает, что владелец имеет полный доступ (чтение, запись, выполнение), а группа и остальные пользователи могут только читать и выполнять файлы.
Пример создания папки с правами доступа:
import os
# Создание папки с правами 755
os.mkdir('new_folder', mode=0o755)
В этом примере:
- 0o755 – права доступа, где 7 означает полный доступ для владельца, а 5 – доступ на чтение и выполнение для группы и остальных пользователей.
Важно помнить, что при использовании прав доступа в восьмеричной системе следует указывать префикс 0o для корректной интерпретации значения.
Если требуется создать несколько вложенных папок, необходимо использовать функцию os.makedirs(). Важно, что для этой функции также можно задать права доступа для всех создаваемых каталогов:
import os
# Создание вложенных папок с правами 0o755
os.makedirs('parent_folder/child_folder', mode=0o755)
Примечание: Права доступа определяют, кто может читать, изменять или выполнять файлы в папке. Для владельца папки доступ может быть максимальным (чтение, запись и выполнение), для группы – ограниченным, а для остальных пользователей – только с правами на чтение или выполнение. Убедитесь, что выбранные вами права соответствуют требованиям безопасности и конфиденциальности данных.
