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

问题描述

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

我正在用python编写此工具,并且不想在3.6以下使用任何python解释器。使用包pathlib似乎是处理python中路径的现代方法。因此,我想尽可能地将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