Façon efficace de créer des chemins récursifs Python
J'ai besoin d'une fonction simple pour créer un chemin d'accès en Python où le parent peut ou peut ne pas exister.
De la documentation python os.makedirs échouera si l'un des parents existe.
J'ai écrit ci-dessous la méthode qui fonctionne en fait comme de nombreux sous-répertoires nécessaires.
Ne ce look efficace?
def create_path(path):
import os.path as os_path
paths_to_create = []
while not os_path.lexists(path):
paths_to_create.insert(0, path)
head,tail = os_path.split(path)
if len(tail.strip())==0: # Just incase path ends with a /or \
path = head
head,tail = os_path.split(path)
path = head
for path in paths_to_create:
os.mkdir(path)
source d'informationauteur |
Vous devez vous connecter pour publier un commentaire.
Non,
os.makedirs
échouera si le répertoire existe déjà. Il ne manquera pas, si seulement tout les répertoires parents existe déjà.Voici mon point de vue, ce qui permet au système de bibliothèques de faire tout le chemin-des querelles. Toutes les erreurs autres que le répertoire déjà existant sont propagées.
Brouillon:
Essayer ce code, il vérifie si le chemin d'accès n'existe jusqu'à n sous-répertoire de niveau, et de créer un répertoire s'il n'existe pas encore.
Avec python ( >=3.4.1 ) il n'y a exist_ok paramètre pour les os.makedirs.
Donc si vous l'utilisez comme exist_ok=True il n'y aura aucun problème pour Récursive création de répertoire.
J'ai trouvé cette question tout en recherchant un moyen de faire simple répertoire des arbres à l'intérieur d'un répertoire de projet.
Je suis un peu nouveau pour Python, et j'ai de la peine quand structures de données trop complexe, c'est à dire imbriqués. Il est beaucoup plus facile sur mon cerveau mentale de cartographie de garder une trace de petites listes de iterables, alors je suis venu avec deux defs pour m'aider avec le répertoire de création de l'arbre généalogique.
L'exemple de quatre objets pour créer un arbre:
Si le répertoire existe, il n'est pas remplacé et l'erreur passe en silence.
L'arborescence du répertoire que cet exemple crée ressemble à ceci:
Ce code va générer l'arborescence de répertoire donné, avec de la profondeur et de la largeur, à l'aide de récursive appel de la fonction:
C'est un vieux thread, mais je n'étais pas satisfait avec les solutions apportées depuis qu'ils étaient pour la plupart trop compliqué pour une simple tâche.
De fonctions disponibles dans la bibliothèque, je crois que le plus propre que nous pouvons faire est: