Python Language makedirs - création récursive d'annuaire


Exemple

Étant donné un répertoire local avec le contenu suivant:

 └── dir1
     ├── subdir1
     └── subdir2

Nous voulons créer le même sous-répertoire, subdir2, sous un nouveau répertoire dir2, qui n'existe pas encore.

import os

os.makedirs("./dir2/subdir1")
os.makedirs("./dir2/subdir2")

En cours d'exécution cela se traduit par

├── dir1
│   ├── subdir1
│   └── subdir2
└── dir2
    ├── subdir1
    └── subdir2

dir2 n'est créé que la première fois qu'il est nécessaire, pour la création de subdir1.

Si nous avions utilisé os.mkdir , nous aurions eu une exception car dir2 n’aurait pas encore existé.

    os.mkdir("./dir2/subdir1")
OSError: [Errno 2] No such file or directory: './dir2/subdir1'

os.makedirs ne l'aimera pas si le répertoire cible existe déjà. Si nous le relançons à nouveau:

OSError: [Errno 17] File exists: './dir2/subdir1'

Cependant, cela pourrait facilement être résolu en interceptant l'exception et en vérifiant que le répertoire a bien été créé.

try:
    os.makedirs("./dir2/subdir1")
except OSError:
    if not os.path.isdir("./dir2/subdir1"):
        raise

try:
    os.makedirs("./dir2/subdir2")
except OSError:
    if not os.path.isdir("./dir2/subdir2"):
        raise