温馨提示:本文翻译自stackoverflow.com,查看原文请点击:python - Convert Windows relative path to POSIX relative path so I can join POSIX absolute path and Windows r
python windows path relative-path absolute-path

python - 将Windows相对路径转换为POSIX相对路径,以便我可以加入POSIX绝对路径和Windows r

发布于 2020-03-27 12:08:43

我正在寻找独立于平台的解决方案。一切都可以在Linux上运行,因为os.walk已经返回了POSIX路径。但是,如果我使用Windows,则可能会获得以下两个路径:

abspath = "/x/y/z" # given path for a remote server which uses POSIX paths
relpath = "a\\b\\c" # acquired from local file system via os.walk, so it uses slash or backslash depending on the platform

对于此示例,联接路径的预期结果将是:

'/x/y/z/a/b/c'

但是,自然地,使用posixpath.join结果会:

>>> posixpath.join(abspath, relpath)
'/x/y/z/a\\b\\c'

因此,当我在Windows上并且具有诸如的相对路径时a\\b\\c,我认为a/b/c先将其转换为POSIX相对路径可能有意义,因此我posixpath.join以后可以使用吗?

但是,我不认为简单地用斜杠替换每个反斜杠是最佳做法-是吗?我找不到提供这种转换的任何功能。

查看更多

查看更多

提问者
finefoot
被浏览
110
finefoot 2019-07-04 02:21

除了使用os哪个依赖平台,或者posixpath哪个仅适用于POSIX路径,Python的pathlib模块似乎是一个不错的选择:

该模块提供了代表文件系统路径的类,这些类具有适用于不同操作系统的语义

这是上述问题示例的解决方案:

def example(abspath, relpath):
    import pathlib
    abspath = pathlib.PurePosixPath(abspath)
    relpath = pathlib.PurePath(relpath)
    return str(abspath.joinpath(relpath))

pathlib.PurePosixPath之所以使用,abspath是因为最终路径应该是POSIX路径,并且pathlib.PurePath可以在Windows和Linux上使用:

pathlib.PurePath-代表系统路径风格的通用类(实例化它会创建a PurePosixPath或a PureWindowsPath

在Linux上的示例调用可能如下所示:

>>> example("/x/y/z", "a/b/c")
'/x/y/z/a/b/c'

Windows上的示例调用可能如下所示:

>>> example("/x/y/z", "a\\b\\c")
'/x/y/z/a/b/c'

因此,它会在两个平台上产生正确的POSIX路径。