Python 路径 - 处理主目录和相对目录
Python path - handling home AND relative directory
我正在尝试从用户输入中获取绝对路径,因此我的脚本中没有歧义。我需要能够处理 ~/Documents/repos/project
和 ./project
.
这两个路径
os.path
和 pathlib
等库能够解决这两种情况 - 例如,在 pathlib
中,expanduser
解决 ~
和 resolve()
找出相对路径,但两者都不能同时做。
具体来说,expanduser
将去除任何句点的相对路径,而 resolve()
将错误地解析包含 ~
的路径。这意味着将两者结合起来会让我走上一条不正确的道路。
我可以简单地将 ~
替换为 Path.home()
,然后解析路径,但我想知道是否有“更正确”或更简单的方法来实现此目的。
可以一起使用os.path.abspath
and os.path.expanduser
:
/var/tmp $ python
>>> from os.path import abspath, expanduser
>>> abspath(expanduser("./bar"))
'/var/tmp/bar'
>>> abspath(expanduser("~/foo"))
'/home/my.username/foo'
pathlib
方法:
>>> PosixPath('./bar').expanduser().resolve()
PosixPath('/var/tmp/bar')
>>> PosixPath('~/foo').expanduser().resolve()
PosixPath('/home/my.username/foo')
我正在尝试从用户输入中获取绝对路径,因此我的脚本中没有歧义。我需要能够处理 ~/Documents/repos/project
和 ./project
.
os.path
和 pathlib
等库能够解决这两种情况 - 例如,在 pathlib
中,expanduser
解决 ~
和 resolve()
找出相对路径,但两者都不能同时做。
具体来说,expanduser
将去除任何句点的相对路径,而 resolve()
将错误地解析包含 ~
的路径。这意味着将两者结合起来会让我走上一条不正确的道路。
我可以简单地将 ~
替换为 Path.home()
,然后解析路径,但我想知道是否有“更正确”或更简单的方法来实现此目的。
可以一起使用os.path.abspath
and os.path.expanduser
:
/var/tmp $ python
>>> from os.path import abspath, expanduser
>>> abspath(expanduser("./bar"))
'/var/tmp/bar'
>>> abspath(expanduser("~/foo"))
'/home/my.username/foo'
pathlib
方法:
>>> PosixPath('./bar').expanduser().resolve()
PosixPath('/var/tmp/bar')
>>> PosixPath('~/foo').expanduser().resolve()
PosixPath('/home/my.username/foo')