Python pathlib:解析符号链接的完整路径而不跟随它

kur*_*pan 9 python path os.path pathlib

假设我有一个/home/me/folder/link指向 的链接/home/me/target。当我打电话时

pathlib.Path("link").resolve()
Run Code Online (Sandbox Code Playgroud)

from /home/me/folder/,它将返回目标的解析路径而不是链接的解析路径。我怎样才能使用后者pathlib(似乎没有任何选项resolve())?

os.path相当于我正在寻找的东西os.path.abspath("link")

sna*_*erb 5

pathlib.Path有一个absolute方法可以做你想做的事。

$  mkdir folder
$  touch target
$  ln -s ~/target ~/folder/link
$  ls -l folder/
total 0
lrwxrwxrwx 1 me users 16 Feb 20 19:47 link -> /home/me/target
$  cd folder

$/folder  python3.7 -c 'import os.path;print(os.path.abspath("link"))'
/home/me/folder/link

$/folder  python3.7 -c 'import pathlib;p = pathlib.Path("link");print(p.absolute())'
/home/me/folder/link
Run Code Online (Sandbox Code Playgroud)

该方法没有出现在模块文档中,但其文档字符串如下:

返回此路径的绝对版本。即使路径没有指向任何内容,此函数也可以工作。没有进行标准化,即所有“.” 和“..”将保留在一起。使用resolve() 获取文件的规范路径。

值得注意的是,方法代码(3.7 分支中)中有一些注释表明它可能未在所有平台上进行完全测试。