Vous pouvez également vouloir créer le répertoire s'il n'est pas là.
Source , s'il est toujours là sur SO.
================================================== ===================
Sur Python ≥ 3,5, utilisez pathlib.Path.mkdir
:
from pathlib import Path
Path("/my/directory").mkdir(parents=True, exist_ok=True)
Pour les anciennes versions de Python, je vois deux réponses avec de bonnes qualités, chacune avec un petit défaut, je vais donc donner mon avis:
Essayez os.path.exists
et pensez os.makedirs
à la création.
import os
if not os.path.exists(directory):
os.makedirs(directory)
Comme indiqué dans les commentaires et ailleurs, il existe une condition de concurrence - si le répertoire est créé entre le os.path.exists
et les os.makedirs
appels, le os.makedirs
échouera avec un OSError
. Malheureusement, la capture de couverture OSError
et la poursuite ne sont pas infaillibles, car elles ignoreront l'échec de la création du répertoire en raison d'autres facteurs, tels que des autorisations insuffisantes, un disque plein, etc.
Une option serait de piéger le OSError
et d'examiner le code d'erreur incorporé (voir Existe - t-il un moyen multiplateforme d'obtenir des informations à partir de OSError de Python ):
import os, errno
try:
os.makedirs(directory)
except OSError as e:
if e.errno != errno.EEXIST:
raise
Alternativement, il pourrait y en avoir un second os.path.exists
, mais supposons qu'un autre crée le répertoire après la première vérification, puis le supprime avant le second - nous pourrions encore être dupes.
Selon l'application, le danger des opérations simultanées peut être supérieur ou inférieur au danger posé par d'autres facteurs tels que les autorisations de fichiers. Le développeur devrait en savoir plus sur l'application particulière en cours de développement et son environnement attendu avant de choisir une implémentation.
Les versions modernes de Python améliorent un peu ce code, à la fois en exposant FileExistsError
(en 3.3 +) ...
try:
os.makedirs("path/to/directory")
except FileExistsError:
# directory already exists
pass
... et en permettant à un argument mot-clé d'être os.makedirs
appeléexist_ok
(en 3.2+).
os.makedirs("path/to/directory", exist_ok=True) # succeeds even if directory exists.
os.stat
place, pour voir si le répertoire existe et est un répertoire au même moment.