代码之家  ›  专栏  ›  技术社区  ›  MatrixManAtYrService

为什么是路径库路径(“文件”)。父级.父级对我的工作目录敏感吗?

  •  3
  • MatrixManAtYrService  · 技术社区  · 4 年前

    ❯ 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,或者是其他原因导致它的输出对我的工作目录敏感?

    1 回复  |  直到 4 年前
        1
  •  2
  •   Iain Shelvington    4 年前

    你需要打电话 Path.resolve() 绝对路径(包括所有父目录和删除所有符号链接的完整路径)

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

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