Python pathlib:将完整路径解析为符号 link 而不遵循它
Python pathlib: Resolve full path to symbolic link without following it
假设我有一个指向 /home/me/target
的 link/home/me/folder/link
。
当我打电话给
pathlib.Path("link").resolve()
从 /home/me/folder/
,它将 return 到 目标 的解析路径,而不是 link 的解析路径。
如何使用 pathlib
获得后者(resolve()
似乎没有任何选项)?
(os.path
等同于我正在寻找的内容 os.path.abspath("link")
)
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
该方法未出现在模块文档中,但其 docstring 显示为:
Return an absolute version of this path. This function works
even if the path doesn't point to anything.
No normalization is done, i.e. all '.' and '..' will be kept along.
Use resolve() to get the canonical path to a file.
值得注意的是,方法代码(在 3.7 分支中)中有注释表明它可能未在所有平台上进行全面测试。
假设我有一个指向 /home/me/target
的 link/home/me/folder/link
。
当我打电话给
pathlib.Path("link").resolve()
从 /home/me/folder/
,它将 return 到 目标 的解析路径,而不是 link 的解析路径。
如何使用 pathlib
获得后者(resolve()
似乎没有任何选项)?
(os.path
等同于我正在寻找的内容 os.path.abspath("link")
)
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
该方法未出现在模块文档中,但其 docstring 显示为:
Return an absolute version of this path. This function works even if the path doesn't point to anything. No normalization is done, i.e. all '.' and '..' will be kept along. Use resolve() to get the canonical path to a file.
值得注意的是,方法代码(在 3.7 分支中)中有注释表明它可能未在所有平台上进行全面测试。