Quelle est la façon la plus élégante pour vérifier si le répertoire d'un fichier va être écrit existe, et si pas, créez le répertoire? Voici ce que j'ai essayé:
filename = "/my/directory/filename.txt"
dir = os.path.dirname(filename)
try:
os.stat(dir)
except:
os.mkdir(dir)
f = file(filename)
D'une certaine manière, j'ai manqué os.path.exists
(merci kanja, Blair, et Douglas). C'est ce que j'ai maintenant:
def ensure_dir(f):
d = os.path.dirname(f)
if not os.path.exists(d):
os.makedirs(d)
Est-il un drapeau "open", qui fait de ce lieu automatiquement?
40 votes
En général, vous devrez tenir compte du cas où le nom du fichier ne contient pas de répertoire. Sur ma machine, dirname('foo.txt') donne '', qui n'existe pas et fait échouer makedirs().
14 votes
Dans python 2.7
os.path.mkdir
n'existe pas. C'estos.mkdir
.9 votes
Si le chemin existe il faut non seulement vérifier si c'est un répertoire et non un fichier normal ou un autre objet (beaucoup de réponses vérifient cela) mais il faut aussi vérifier s'il est accessible en écriture (je n'ai pas trouvé de réponse qui vérifie cela).
13 votes
Dans le cas où vous êtes venu ici pour créer des répertoires parents de la chaîne de chemin de fichier
p
Voici mon extrait de code :os.makedirs(p[:p.rindex(os.path.sep)], exist_ok=True)
2 votes
méta-discussion des réponses à cette question
1 votes
En ce qui concerne les conditions de course pour le cas où le disque est presque plein, vous pouvez éventuellement vérifier qu'un seuil minimum (défini par l'utilisateur) d'espace libre existe avant d'essayer de le faire : Espace restant sur le volume sur plusieurs plates-formes à l'aide de python