os.path.join获取上层路径

时间:2019-01-29 16:00:13

标签: python python-3.x

请考虑以下代码:
os.path.abspath(os.path.join('../../', __file__))

我很困惑,因为目前,它返回的路径与__file__相同。

有人知道为什么我没有达到__file__路径的两个级别吗?

3 个答案:

答案 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__, '../../'))

像魅力一样工作