5491 votes

Vérifier si un répertoire existe et de le créer si nécessaire

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'est os.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).

6voto

iPhynx Points 409

Vous pouvez utiliser os.listdir pour ça :

import os
if 'dirName' in os.listdir('parentFolderPath')
    print('Directory Exists')

6voto

Ralph Schwerdt Points 69

Si vous considérez les points suivants :

os.path.isdir('/tmp/dirname')

signifie qu'un répertoire (chemin) existe ET est un répertoire. Pour moi, cette méthode répond à mes besoins. Je peux donc m'assurer qu'il s'agit d'un dossier (et non d'un fichier) et qu'il existe.

3voto

Cela ne répond peut-être pas exactement à la question. Mais je suppose que votre intention réelle est de créer un fichier et ses répertoires parents, compte tenu de son contenu, en une seule commande.

Vous pouvez le faire avec fastcore extension à pathlib : path.mk_write(data)

from fastcore.utils import Path
Path('/dir/to/file.txt').mk_write('Hello World')

Voir plus dans documentation fastcore

2voto

Evil Exists Points 46
import os
if os.path.isfile(filename):
    print "file exists"
else:
    "Your code here"

Où votre code ici est d'utiliser la commande (touch)

Il vérifiera si le fichier existe et s'il n'existe pas, il le créera.

-1voto

c4f4t0r Points 270
import os

if not os.path.isfile("test") and not os.path.isdir("test"):
            os.mkdir("test")

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X