如何获取父dir位置

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (27)

这段代码是获取b.py中的模板/blog 1/page.html:

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

但我想知道父母的位置:

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

以及如何获得父母的位置

谢谢

更新:

这是对的:

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

path = os.path.abspath(os.path.join(os.path.dirname(__file__),".."))
提问于
用户回答回答于

你可以反复地用脏名来爬得更高:dirname(dirname(file))...。然而,这只能达到根包的程度。如果这是一个问题,请使用os.path.abspathdirname(dirname(abspath(file)))...

用户回答回答于

os.path.abspath不验证任何内容,所以如果我们已经附加了字符串,__file__那就不需要打扰dirname或加入任何内容。只要把它__file__当作一个目录并开始:

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

这远不如以前os.path.abspath(os.path.join(os.path.dirname(__file__),".."))那么容易管理dirname(dirname(__file__))

但是,由于我们知道要爬上多少层,我们可以用一个简单的小函数来清理它:

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'

扫码关注云+社区