También es posible que desee crear el directorio si no está allí.
Fuente , si todavía está allí en SO.
================================================== ===================
En Python ≥ 3.5, use pathlib.Path.mkdir
:
from pathlib import Path
Path("/my/directory").mkdir(parents=True, exist_ok=True)
Para versiones anteriores de Python, veo dos respuestas con buenas cualidades, cada una con un pequeño defecto, por lo que daré mi opinión al respecto:
Prueba os.path.exists
y considera os.makedirs
para la creación.
import os
if not os.path.exists(directory):
os.makedirs(directory)
Como se señaló en los comentarios y en otros lugares, hay una condición de carrera: si el directorio se crea entre os.path.exists
y las os.makedirs
llamadas, os.makedirs
fallará con un OSError
. Desafortunadamente, la captura general OSError
y la continuación no son infalibles, ya que ignorará una falla al crear el directorio debido a otros factores, como permisos insuficientes, disco completo, etc.
Una opción sería atrapar OSError
y examinar el código de error incrustado (consulte ¿Hay una manera multiplataforma de obtener información del OSError de Python? ):
import os, errno
try:
os.makedirs(directory)
except OSError as e:
if e.errno != errno.EEXIST:
raise
Alternativamente, podría haber un segundo os.path.exists
, pero supongamos que otro creó el directorio después de la primera verificación, luego lo eliminó antes de la segunda, aún podríamos engañarnos.
Dependiendo de la aplicación, el peligro de las operaciones concurrentes puede ser más o menos que el peligro que representan otros factores, como los permisos de archivos. El desarrollador tendría que saber más sobre la aplicación particular que se está desarrollando y su entorno esperado antes de elegir una implementación.
Las versiones modernas de Python mejoran bastante este código, tanto al exponer FileExistsError
(en 3.3+) ...
try:
os.makedirs("path/to/directory")
except FileExistsError:
# directory already exists
pass
... y al permitir que un argumento de palabra clave que os.makedirs
se llamaexist_ok
(en 3.2+).
os.makedirs("path/to/directory", exist_ok=True) # succeeds even if directory exists.
os.stat
lugar, para ver si el directorio existe y es un directorio en el mismo momento.