这段代码是在b.py中获取templates/blog1/page.html:
path = os.path.join(os.path.dirname(__file__), os.path.join('templates', 'blog1/page.html'))
Run Code Online (Sandbox Code Playgroud)
但我想获得父目录位置:
aParent
|--a
| |---b.py
| |---templates
| |--------blog1
| |-------page.html
|--templates
|--------blog1
|-------page.html
Run Code Online (Sandbox Code Playgroud)
以及如何获得aParent位置
谢谢
更新:
这是正确的:
dirname=os.path.dirname
path = os.path.join(dirname(dirname(__file__)), os.path.join('templates', 'blog1/page.html'))
Run Code Online (Sandbox Code Playgroud)
要么
path = os.path.abspath(os.path.join(os.path.dirname(__file__),".."))
Run Code Online (Sandbox Code Playgroud)
Mar*_*tos 159
你可以反复使用dirname来爬高:dirname(dirname(file)).但是,这只能到根包.如果这是一个问题,请使用os.path.abspath:dirname(dirname(abspath(file))).
joe*_*ler 54
os.path.abspath不验证任何东西,所以如果我们已经附加了字符串,__file__就不需要打扰dirname或加入或者任何一个.只需__file__视为目录并开始攀登:
# climb to __file__'s parent's parent:
os.path.abspath(__file__ + "/../../")
Run Code Online (Sandbox Code Playgroud)
这远比那些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'
Run Code Online (Sandbox Code Playgroud)
Gav*_*hen 29
使用相对路径与pathlib在Python 3.4+模块:
from pathlib import Path
Path(__file__).parent
Run Code Online (Sandbox Code Playgroud)
您可以使用多个调用parent在路径中进一步:
Path(__file__).parent.parent
Run Code Online (Sandbox Code Playgroud)
作为指定parent两次的替代方法,您可以使用
Path(__file__).parents[1]
Run Code Online (Sandbox Code Playgroud)
Fel*_*ing 11
os.path.dirname(os.path.abspath(__file__))
Run Code Online (Sandbox Code Playgroud)
应该给你的路径a.
但如果b.py是当前执行的文件,那么你可以通过这样做来实现同样的目标
os.path.abspath(os.path.join('templates', 'blog1', 'page.html'))
Run Code Online (Sandbox Code Playgroud)
os.pardir是一种更好的方式../,更具可读性.
import os
print os.path.abspath(os.path.join(given_path, os.pardir))
Run Code Online (Sandbox Code Playgroud)
这将返回given_path的父路径
一种简单的方法可以是:
import os
current_dir = os.path.abspath(os.path.dirname(__file__))
parent_dir = os.path.abspath(current_dir + "/../")
print parent_dir
Run Code Online (Sandbox Code Playgroud)