首页 > 解决方案 > Python pathlib:解析符号链接的完整路径而不遵循它

问题描述

假设我有一个/home/me/folder/link指向/home/me/target. 当我打电话

pathlib.Path("link").resolve()

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

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

标签: pythonpathos.pathpathlib

解决方案


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

该方法未出现在模块文档中,但其文档字符串为:

返回此路径的绝对版本。即使路径不指向任何东西,此功能也有效。没有进行规范化,即所有的“。” 和 '..' 将被保留。使用 resolve() 获取文件的规范路径。

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


推荐阅读