如何使用pathlib处理以~开头的路径?

How to use pathlib to process paths that begin with ~?

我正在编写一个需要一些路径作为输入的 cli 工具。

我正在 python 中编写此工具,并且不想使用低于 3.6 的 python 解释器。在处理 python 中的路径时,使用包 pathlib 似乎是现代的方式。所以我想尽可能留下 osos.path

似乎 pathlib 将路径 ~/test/ 解释为当前工作目录的相对路径,下面的代码显示了它

import pathlib

test_path = pathlib.Path('~/test')
absolute_path = test_path.absolute()

print(f"{str(test_path):>31}\n{str(absolute_path):>31}")
# output:
#              ~/test
# /home/myUser/~/test

如何使用 pathlib 将每个以 ~ 开头的路径识别为绝对路径并自动将 ~ 扩展到用户主目录?

答案很简单,在 Path 对象上使用 .expanduser() 而不是 .absolute(),它会将 ~ 替换为用户的主目录 运行 脚本,结果是仅当 ~ 在开头时也是绝对路径:

import pathlib

test_path = pathlib.Path('~/test')
absolute_path = test_path.expanduser()
# If ~ is somewhere in the middle of the path, use .resolve() to get an absolute path.

print(f"{str(test_path):>31}\n{str(absolute_path):>31}")
# output:
#            ~/test
# /home/myUser/test