os.path.join 用于获取级别路径



假设你有以下代码:
os.path.abspath(os.path.join('../../', __file__))

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

知道为什么我没有在__file__路径上爬两级吗?

__file__

绝对文件路径,因此连接会尝试如下操作:

os.path.join('../../', '/path/to/file')

由于第二个参数已经是绝对路径,因此所有先前的参数都是无效的。

另请注意,__file__包含文件名本身,因此如果您想向上放置两个目录,则需要将其拆分。最简单的解决方案是使用 pathlib.Path

Path(__file__).parents[2]

如果你想n级别,你可以使用 Path(__file__).parents[n] .

从文档(强调我的):

os.path.join(path, *paths)

联接一个或多个路径组件 智能。返回值是路径和任何 只有一个目录分隔符的 *path 的成员 (OS.sep) 在除最后一个部分之外的每个非空部分之后,这意味着结果 仅当最后一部分为空时,才会以分隔符结尾。如果组件 是绝对路径,所有以前的组件都被丢弃, 从绝对路径组件继续连接

__file__是绝对路径,因此join忽略前面的../../

经过更多的尝试和错误,我想我找到了最好的解决方案:

os.path.abspath(os.path.join(__file__, '../../'))

最新更新