Python 3.6+使用pathlib不解析符号链接获取绝对路径的疑问
获取不解析符号链接的绝对路径(Python 3.6+ pathlib用法)
你的思路其实已经找对了方向,但确实有更简洁直接的方法,还有一些关于resolve()的细节可以明确:
首选方案:使用
absolute()方法
Python 3.6及以上的pathlib.Path自带absolute()方法,它的作用就是返回文件的绝对路径,并且不会解析符号链接,完全匹配你的需求。用法非常简单:from pathlib import Path ex = Path('example.txt') abs_ex = ex.absolute()这个方法和
os.path.abspath()是对应的,但用pathlib的链式调用风格更统一。关于
resolve()的参数说明resolve()方法的核心作用就是解析符号链接、规范化路径,它的参数只有一个strict(默认False):- 当
strict=True时,如果路径不存在会抛出FileNotFoundError;False则允许路径不存在。
但不管strict怎么设置,resolve()都会解析符号链接,所以它确实不适合你要保留符号链接路径的场景。你之前用ex.parent.resolve()/ex的写法是可行的,但属于“曲线救国”,不如absolute()直接。
- 当
效果验证示例
假设当前目录有一个符号链接link.txt指向example.txt,测试代码如下:from pathlib import Path link_path = Path('link.txt') print(link_path.absolute()) # 输出: /当前绝对路径/link.txt(保留符号链接) print(link_path.resolve()) # 输出: /当前绝对路径/example.txt(解析了符号链接)
总结一下,最简洁且符合需求的写法就是调用absolute()方法,既满足获取绝对路径,又不会解析符号链接。
内容的提问来源于stack exchange,提问作者Ray Salemi
相关产品推荐
相关产品推荐

