Как создать каталог и все отсутствующие родительские каталоги?
Я пытаюсь создать директорию по заданному пути, при этом необходимо создать все отсутствующие родительские директории в этом пути. Например, в Bash я могу использовать команду mkdir -p /path/to/nested/directory
, которая выполняет эту задачу. Как я могу реализовать что-то подобное в своем коде?
2 ответ(ов)
Использование конструкции try except
с правильным кодом ошибки из модуля errno
позволяет избежать гонки (race condition) и обеспечивает кросс-платформенность:
import os
import errno
def make_sure_path_exists(path):
try:
os.makedirs(path)
except OSError as exception:
if exception.errno != errno.EEXIST:
raise
Другими словами, мы пытаемся создать директории, и если они уже существуют, мы игнорируем ошибку. С другой стороны, если возникает другая ошибка, она будет обработана и выдана сообщение об ошибке. Например, если вы предварительно создадите директорию 'a' и удалите из неё все права доступа, вы получите исключение OSError
, где errno
будет равен errno.EACCES
(Ошибка доступа, код ошибки 13).
Самый быстрый и безопасный способ сделать это:
Этот код создаст директорию, если она не существует, и пропустит создание, если она уже есть:
from pathlib import Path
Path("path/with/childs/.../").mkdir(parents=True, exist_ok=True)
Импорт модулей из родительской папки
Извлечение имени файла из пути независимо от формата ОС/пути
Как получить полный путь к директории текущего файла?
Функциональность mkdir -p в Python
Получение списка всех подпапок в текущем каталоге