Вы также можете создать каталог, если его там нет.
Источник , если он все еще там на SO.
================================================== ===================
На Python ≥ 3.5 используйте pathlib.Path.mkdir
:
from pathlib import Path
Path("/my/directory").mkdir(parents=True, exist_ok=True)
Для более старых версий Python я вижу два ответа с хорошими качествами, каждый с небольшим недостатком, поэтому я сделаю это:
Попробуйте os.path.exists
и рассмотрите os.makedirs
для создания.
import os
if not os.path.exists(directory):
os.makedirs(directory)
Как отмечено в комментариях и в других местах, существует условие состязания - если каталог создается между вызовами os.path.exists
и os.makedirs
вызовами, os.makedirs
произойдет сбой с помощью OSError
. К сожалению, общий поиск OSError
и продолжение не являются надежными, так как они будут игнорировать сбой при создании каталога из-за других факторов, таких как недостаточные разрешения, полный диск и т. Д.
Один из вариантов - перехватить OSError
и изучить встроенный код ошибки (см. Существует ли кроссплатформенный способ получения информации из Python OSError ):
import os, errno
try:
os.makedirs(directory)
except OSError as e:
if e.errno != errno.EEXIST:
raise
В качестве альтернативы, может быть второй os.path.exists
, но предположим, что другой создал каталог после первой проверки, а затем удалил его до второй проверки - нас все еще можно обмануть.
В зависимости от приложения опасность одновременных операций может быть больше или меньше опасности других факторов, таких как права доступа к файлам. Разработчик должен знать больше о конкретном разрабатываемом приложении и его ожидаемой среде, прежде чем выбирать реализацию.
Современные версии Python немного улучшают этот код, предоставляя FileExistsError
(в версии 3.3+ ) ...
try:
os.makedirs("path/to/directory")
except FileExistsError:
# directory already exists
pass
... и позволяя ключевому аргументу os.makedirs
вызыватьсяexist_ok
(в 3.2+).
os.makedirs("path/to/directory", exist_ok=True) # succeeds even if directory exists.
os.stat
вместо этого, чтобы увидеть, существует ли каталог и является ли каталог одновременно.