Создание каталогов: практическое руководство
Основные способы создания папок в Python
При работе с файлами часто требуется создавать новые директории. Python предоставляет несколько подходов для решения этой задачи, от стандартного модуля os до современного pathlib. В этом разделе рассмотрены все основные варианты, их особенности и типичные ошибки.
Использование функции os.makedirs()
Наиболее универсальное решение - os.makedirs(). Оно создает все промежуточные директории, если их нет, и принимает параметр exist_ok для подавления ошибки, если папка уже существует.
import os
os.makedirs('project/images', exist_ok=True)
print('Папка project/images создана или уже существует')Python создание папки (создание папки/директории в python)
Если не указать exist_ok=True, при попытке создать уже существующую папку будет выброшено исключение FileExistsError.
Типичная ошибка: вызов os.makedirs('project/images') при уже существующей папке приводит к падению программы. Решение - использовать параметр exist_ok=True или проверять существование через os.path.exists().
Как создать одну папку без вложенности?
Функция os.mkdir() создает только конечную директорию. Родительские папки должны существовать, иначе возникает FileNotFoundError.
import os
os.mkdir('temp') # создает папку temp в текущей директории
print('Папка temp создана')
Если родительский каталог отсутствует, возникнет ошибка. Перед вызовом следует убедиться, что все родители существуют, или использовать os.makedirs().
Как создать папку с помощью pathlib?
Модуль pathlib предлагает объектно-ориентированный интерфейс. Метод Path.mkdir() с аргументом parents=True эквивалентен os.makedirs().
from pathlib import Path
Path('output/data').mkdir(parents=True, exist_ok=True)
print('Папка output/data создана')
Без parents=True метод работает как os.mkdir().
Если не указать exist_ok=True и папка уже существует, возникнет FileExistsError. Рекомендуется всегда добавлять этот параметр при создании вложенных структур.
Как создать временную папку?
Модуль tempfile позволяет создавать временные директории, которые автоматически удаляются после завершения работы (если используется контекстный менеджер).
import tempfile
with tempfile.TemporaryDirectory() as tmp_dir:
print(f'Временная папка: {tmp_dir}')
# внутри блока папка существует
# после выхода из блока папка удаляется
Это удобно для тестирования или обработки промежуточных данных.
Как создать папку с определёнными правами доступа?
На Unix-системах можно задать права при создании через параметр mode в os.mkdir() или os.makedirs(). В pathlib для этого используется mode в mkdir().
import os
os.mkdir('private', mode=0o700) # только владелец
print('Папка private с правами 700')
Обратите внимание: на Windows параметр mode игнорируется.
Если указать mode в виде строки (например, '755'), возникнет TypeError. Права задаются восьмеричным числом.
Расширенные примеры работы с папками
Создание глубокого дерева папок с проверкой существования
В реальных проектах часто необходимо создать структуру вроде "года/месяца/дня". Пример с полной обработкой ошибок:
import os
from pathlib import Path
target = Path('archive/2025/03/14')
try:
target.mkdir(parents=True, exist_ok=True)
print(f'Директория {target} готова')
except PermissionError:
print('Недостаточно прав для создания папки')
except OSError as e:
print(f'Ошибка ввода-вывода: {e}')
Директория archive/2025/03/14 готова
Создание папки и запись в неё файла
После создания директории в неё можно сразу сохранять файлы:
from pathlib import Path
Path('reports').mkdir(exist_ok=True)
report = Path('reports/summary.txt')
report.write_text('Отчёт за март')
print('Файл сохранён:', report.read_text())
Файл сохранён: Отчёт за март
Создание временной папки с ручным управлением
Если нужно сохранить временную папку до явного удаления, используется tempfile.mkdtemp():
import tempfile
import shutil
temp_dir = tempfile.mkdtemp(prefix='myapp_')
print('Временная папка:', temp_dir)
# ... работа с папкой ...
shutil.rmtree(temp_dir) # удаление вручную
Временная папка: /tmp/myapp_abc123
Создание папки с правами в стиле pathlib
Пример для Unix (на Windows права игнорируются):
from pathlib import Path
import stat
Path('secure').mkdir(mode=stat.S_IRUSR | stat.S_IWUSR | stat.S_IXUSR) # 0o700
print('Папка secure создана с правами только для владельца')
Папка secure создана с правами только для владельца
Создание нескольких папок в цикле
Генерация последовательности каталогов:
from pathlib import Path
base = Path('runs')
for i in range(1, 4):
(base / f'experiment_{i}').mkdir(parents=True, exist_ok=True)
print('Папки созданы:', list(base.iterdir()))
Папки созданы: [PosixPath('runs/experiment_1'), PosixPath('runs/experiment_2'), PosixPath('runs/experiment_3')]