171 votes

Comment obtenir l'emplacement du répertoire parent

ce code est obtenir les modèles / blog1 / page.html dans b.py:

 path = os.path.join(os.path.dirname(__file__), os.path.join('templates', 'blog1/page.html'))
 

mais je veux obtenir l'emplacement du répertoire parent:

 aParent
   |--a
   |  |---b.py
   |      |---templates
   |              |--------blog1
   |                         |-------page.html
   |--templates
          |--------blog1
                     |-------page.html
 

et comment se rendre aParent

Merci

mis à jour:

c'est juste:

 dirname=os.path.dirname
path = os.path.join(dirname(dirname(__file__)), os.path.join('templates', 'blog1/page.html'))
 

ou

 path = os.path.abspath(os.path.join(os.path.dirname(__file__),".."))
 

224voto

Marcelo Cantos Points 91211

Vous pouvez appliquer plusieurs fois dirname pour monter plus haut: dirname(dirname(file)) . Cela ne peut cependant aller que jusqu'au paquet racine. Si cela pose un problème, utilisez os.path.abspath : dirname(dirname(abspath(file))) .

68voto

joemaller Points 2349

os.path.abspath ne valide pas n'importe quoi, donc si nous sommes déjà ajout de chaînes en __file__ il n'y a pas besoin de s'embêter avec dirname ou de l'adhésion ou de tout cela. De traitement, __file__ comme un répertoire et commencer à grimper:

# climb to __file__'s parent's parent:
os.path.abspath(__file__ + "/../../")

C'est beaucoup moins compliqué que d' os.path.abspath(os.path.join(os.path.dirname(__file__),"..")) et à peu près aussi facile à utiliser que dirname(dirname(__file__)). L'escalade de plus de deux niveaux commence à devenir ridicule.

Mais, puisque nous savons combien d'échelons à gravir, nous avons pu nettoyer avec une simple petite fonction:

uppath = lambda _path, n: os.sep.join(_path.split(os.sep)[:-n])

# __file__ = "/aParent/templates/blog1/page.html"
>>> uppath(__file__, 1)
'/aParent/templates/blog1'
>>> uppath(__file__, 2)
'/aParent/templates'
>>> uppath(__file__, 3)
'/aParent'

14voto

Felix Kling Points 247451
 os.path.dirname(os.path.abspath(__file__))
 

Devrait vous donner le chemin à a .

Mais si b.py est le fichier actuellement exécuté, vous pouvez obtenir le même résultat simplement en faisant

 os.path.abspath(os.path.join('templates', 'blog1', 'page.html'))
 

9voto

Sun Liwen Points 884

os.pardir est un meilleur moyen pour ../ et plus lisible.

 import os
print os.path.abspath(os.path.join(given_path, os.pardir))  
 

Cela renverra le chemin parent du chemin donné.

3voto

YOU Points 44812

Peut-être rejoindre deux dossiers .. , pour obtenir le parent du dossier parent?

 path = os.path.abspath(os.path.join(os.path.dirname(os.path.abspath(__file__)),"..",".."))
 

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