下面的代码是在b.py中获取模板/blog1/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
以及如何获取aParent位置
谢谢
更新:
这是正确的:
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__),".."))
发布于 2010-05-12 17:03:16
您可以重复应用目录名以爬得更高:dirname(dirname(file))
。然而,这只能到达根包。如果这是一个问题,请使用os.path.abspath
:dirname(dirname(abspath(file)))
。
发布于 2013-01-04 11:38:30
os.path.abspath
不验证任何东西,所以如果我们已经将字符串附加到__file__
中,那么就不需要费心使用dirname
或doesn或其他任何东西了。只需将__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'
发布于 2016-09-21 21:18:43
将相对路径与Python 3.4+中的pathlib
模块一起使用:
from pathlib import Path
Path(__file__).parent
您可以使用多个对parent
的调用在path中更进一步:
Path(__file__).parent.parent
作为两次指定parent
的替代方法,您可以使用:
Path(__file__).parents[1]
https://stackoverflow.com/questions/2817264
复制相似问题