给定一个可能是绝对或相对的路径,我想解析其相对于另一个给定路径(如果是相对)的绝对路径,而不更改当前目录。
例如,假设当前工作目录是
/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)?
事实证明,在通过
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", "/.")
'/'