解析相对于另一个路径的相对或绝对路径

问题描述 投票:0回答:1

给定一个可能是绝对或相对的路径,我想解析其相对于另一个给定路径(如果是相对)的绝对路径,而不更改当前目录。

例如,假设当前工作目录是

/cwd

def resolve_path (relative_to, path_to_resolve):
    ???

resolve_path(".", "a/relative/path")
# --> returns /cwd/a/relative/path

resolve_path("example", "a/relative/path")
# --> returns /cwd/example/a/relative/path

resolve_path("/some/path", "a/relative/path")
# --> returns /some/path/a/relative/path

resolve_path("/some/path", "..")
# --> returns /some

resolve_path("/some/path", "/an/absolute/path")
# --> returns /an/absolute/path

resolve_path("/some/path", "/.")
# --> returns /

os.path
(或其他地方)中是否有东西可以做到这一点(最低Python 3.8)?

python python-3.x path
1个回答
0
投票

事实证明,在通过

os.path.join
运行其结果后,
os.path.abspath
已经完全满足了我的需要。

来自 文档

os.path.join

如果某个段是绝对路径...则所有先前的段都将被忽略,并从绝对路径段继续连接。

所以我正在寻找的功能很简单:

def resolve_path (relative_to, path_to_resolve):
    return os.path.abspath(os.path.join(relative_to, path_to_resolve))

结果与预期结果相符:

user@magic:/cwd# python
>>> import os.path
>>> def resolve_path (relative_to, path_to_resolve):
...     return os.path.abspath(os.path.join(relative_to, path_to_resolve))
... 
>>> resolve_path(".", "a/relative/path")
'/cwd/a/relative/path'
>>> resolve_path("example", "a/relative/path")
'/cwd/example/a/relative/path'
>>> resolve_path("/some/path", "a/relative/path")
'/some/path/a/relative/path'
>>> resolve_path("/some/path", "..")
'/some'
>>> resolve_path("/some/path", "/an/absolute/path")
'/an/absolute/path'
>>> resolve_path("/some/path", "/.")
'/'
© www.soinside.com 2019 - 2024. All rights reserved.