57

Как создать каталог и все отсутствующие родительские каталоги?

26

Я пытаюсь создать директорию по заданному пути, при этом необходимо создать все отсутствующие родительские директории в этом пути. Например, в Bash я могу использовать команду mkdir -p /path/to/nested/directory, которая выполняет эту задачу. Как я могу реализовать что-то подобное в своем коде?

2 ответ(ов)

6

Использование конструкции 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).

0

Самый быстрый и безопасный способ сделать это:

Этот код создаст директорию, если она не существует, и пропустит создание, если она уже есть:

from pathlib import Path
Path("path/with/childs/.../").mkdir(parents=True, exist_ok=True)
Чтобы ответить на вопрос, пожалуйста, войдите или зарегистрируйтесь