请考虑以下代码:
os.path.abspath(os.path.join('../../', __file__))
我很困惑,因为目前,它返回的路径与__file__
相同。
有人知道为什么我没有达到__file__
路径的两个级别吗?
答案 0 :(得分:3)
__file__
是绝对文件路径,因此联接尝试执行以下操作:
os.path.join('../../', '/path/to/file')
由于第二个参数已经是绝对路径,因此前面的所有参数均无效。
还要注意,__file__
本身包含文件名,因此,如果要向上查找两个目录,则需要将其分开。最简单的解决方案是使用pathlib.Path
:
Path(__file__).parents[2]
如果您想升级n
,可以使用Path(__file__).parents[n]
。
答案 1 :(得分:2)
从文档中(重点是我的):
os.path.join(path,* paths)
加入一个或多个路径组件 聪明地返回值是path和任何其他对象的串联 *路径的成员,其中只有一个目录分隔符(os.sep) 在每个非空部分之后(最后一个除外),表示结果 如果最后一部分为空,则只会以分隔符结尾。 如果是组件 是绝对路径,所有先前的组件都被丢弃, 连接将从绝对路径组件继续。
__file__
是绝对路径,因此join
会忽略前面的../../
。
答案 2 :(得分:0)
经过反复试验,我找到了我认为最好的解决方案:
os.path.abspath(os.path.join(__file__, '../../'))
像魅力一样工作