Ви також можете створити каталог, якщо його немає.
Джерело , якщо воно все ще є на 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
і вивчити вбудований код помилки (див. Чи існує міжплатформенний спосіб отримання інформації з OSError Python ):
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
замість цього виконати , щоб побачити, чи існує каталог і є той самий момент.