首页 > 解决方案 > 为什么 pathlib.Path(__file__).parent.parent 对我的工作目录敏感?

问题描述

我有一个包含两个目录的脚本。

❯ tree
.
└── foo
    └── bar
        └── test.py
❯ cd foo/bar
❯ cat test.py

    from pathlib import Path
    print(Path(__file__).parent)
    print(Path(__file__).parent.parent)

当我从包含它的目录运行它时,PathLib 认为文件的祖父母与其父文件相同。

❯ python test.py

    . # <-- same
    . # <-- directories

但是当我从顶层运行它时,PathLib 行为正确。

❯ cd ../..
❯ python foo/bar/test.py

    foo/bar # <-- different
    foo     # <-- directories

我是对 PathLib 的 API 有误解,还是有其他原因导致其输出对我的工作目录敏感?

标签: pythonpathlib

解决方案


您需要调用Path.resolve()以使您的路径成为绝对路径(包括所有父目录并删除所有符号链接的完整路径)

from pathlib import Path
print(Path(__file__).resolve().parent)
print(Path(__file__).resolve().parent.parent)

这将导致结果包含每个目录的整个路径,但无论从何处调用该行为都将起作用


推荐阅读