Est-il possible d'obtenir une fonctionnalité similaire à mkdir -p
sur le shell ... depuis python. Je suis à la recherche d'une solution autre qu'un appel système. Je suis sûr que le code est inférieur à 20 lignes ... vraiment je me demande si quelqu'un l'a déjà écrit?
Réponses
Trop de publicités?mkdir -p
fonctionnalités comme suit:
import os, errno
def mkdir_p(path):
try:
os.makedirs(path)
except OSError as exc: # Python >2.5
if exc.errno == errno.EEXIST and os.path.isdir(path):
pass
else: raise
Mise à jour
Pour Python ≥ 3.2, os.makedirs
a un troisième argument optionnel exist_ok
, lorsque la valeur est true, permet à l' mkdir -p
fonctionnalités -à moins d' mode
, et le répertoire existant différentes autorisations à l'; dans ce cas, OSError
est relevée comme précédemment.
En Python > = 3.2, c’est
Dans les versions antérieures, utilisez la réponse de @tzot.
Récemment, j’ai trouvé ce distutils.dir_util.mkpath:
mkdir -p
vous donne une erreur si le fichier existe déjà:
$ touch /tmp/foo
$ mkdir -p /tmp/foo
mkdir: cannot create directory `/tmp/foo': File exists
Donc, un affinement de la précédente suggestion serait de re-raise
l'exception, si os.path.isdir
retours False
(lors de la vérification pour l' errno.EEXIST
).
(Mise à jour) Voir aussi ce très semblable question; je suis d'accord avec la accepté de répondre (et mises en garde) sauf que je recommanderais os.path.isdir
au lieu de os.path.exists
.
(Mise à jour) Par une suggestion dans les commentaires, la fonction complète ressemblerait à:
import os
def mkdirp(directory):
if not os.path.isdir(directory):
os.makedirs(directory)