Часто возникает ситуация, когда при работе с файлами в Python необходимо создать директорию, которая еще не существует. Вот типичный пример:
filename = "/foo/bar/baz.txt" with open(filename, "w") as f: f.write("FOOBAR")
В данном случае, если директории /foo/bar
не существует, будет выброшено исключение IOError
. Это происходит потому что функция open
в режиме записи ("w"
) не создает директории автоматически.
Итак, каким образом можно решить эту проблему?
Один из вариантов — использовать функции os.path.exists
и os.mkdir
. Сначала проверить существование директории, а затем ее создать. Но этот способ может быть довольно громоздким, если требуется создать цепочку вложенных директорий.
import os filename = "/foo/bar/baz.txt" dir_name = os.path.dirname(filename) if not os.path.exists(dir_name): os.mkdir(dir_name) with open(filename, "w") as f: f.write("FOOBAR")
Более удобным и «питоновским» способом будет использование функции os.makedirs
. Эта функция позволяет создать все промежуточные директории в пути к файлу, если они еще не существуют.
import os filename = "/foo/bar/baz.txt" dir_name = os.path.dirname(filename) os.makedirs(dir_name, exist_ok=True) with open(filename, "w") as f: f.write("FOOBAR")
Параметр exist_ok=True
говорит функции os.makedirs
, что если директория уже существует, то ошибку выбрасывать не нужно.
Таким образом, при помощи функции os.makedirs
можно автоматически создавать все необходимые директории при работе с файлами в Python.
Добавить комментарий