如何获取父目录位置
这段代码是在 b.py 文件中获取 templates/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
那么,怎么才能获取到父目录的位置呢?
谢谢!
更新:
这个方法是对的:
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__),".."))
13 个回答
69
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'
77
在Python 3.4及以上版本中,使用相对路径和pathlib
模块:
from pathlib import Path
Path(__file__).parent
你可以多次调用parent
来向路径上更高的层级移动:
Path(__file__).parent.parent
作为一种替代方法,如果不想调用parent
两次,你可以使用:
Path(__file__).parents[1]
227
你可以多次使用dirname这个函数来向上爬,比如用dirname(dirname(file))
。不过,这样做最多只能到达根目录。如果你需要更高的层级,可以使用os.path.abspath
,像这样:dirname(dirname(abspath(file)))
。