URLhttps://learnscript.net/zh/python/file-system/paths/
    复制链接转到说明  示例

    os.path,pathlib 模块,纯路径类,具体路径类介绍

    我被代码海扁署名-非商业-禁演绎
    阅读 6:01·字数 1810·发布 

    os.path,pathlib 模块

    对于文件系统中的路径,Python 提供了os.pathpathlib模块来处理他们,其中os.path模块包含大量与路径相关的函数,而pathlib模块则包含与路径相关的类。os.path模块与pathlib模块所实现的效果基本一致,但也存在一些差异。

    pathlib模块中的类,被划分为纯路径类和具体路径类,我们会对他们逐一介绍。

    pathlib 模块中的纯路径类

    pathlib模块中的纯路径类不提供需要真实访问文件系统的功能,比如,如果一个纯路径对象包含相对路径,那么你无法通过该对象将相对路径转换为绝对路径。

    pathlib模块包含三个纯路径类,分别是PurePathPurePosixPathPureWindowsPath,其中,PurePosixPathPureWindowsPathPurePath的派生类,当你尝试创建一个PurePath对象时,将根据当前的操作系统产生PurePosixPath(UNIX/Linux/macOS)或PureWindowsPath(Windows)类的实例。

    PurePath(*pathsegments)

    pathsegments 参数

    可变参数pathsegments所包含的位置参数是表示路径的 Python 字符串,或实现了抽象基类os.PathLike的对象,他们将被用于组成新的路径。在新路径被组合的过程中,表示当前目录的.(不包括表示上一级目录的..),以及任何能够被消除的/(不包括新路径开头的双斜杠//)将被消除,比如路径././a/会变为a

    如果一个位置参数表示绝对路径,那么该绝对路径将使之前的位置参数无效,比如,'/a','D:/b'(Windows)将得到路径D:/b'/etc/a','/usr/b'(UNIX/Linux/macOS)将得到路径/usr/b

    如果可变参数pathsegments被忽略,或所有位置参数组合之后等于一个空字符串,那么将得到表示当前目录的路径.

    当然,你可以直接创建pathlib模块的PurePosixPathPureWindowsPath类的实例,无论当前的操作系统是什么。

    PurePosixPath(*pathsegments)
    PureWindowsPath(*pathsegments)

    pathsegments 参数

    可变参数pathsegmentsPurePath构造器中的可变参数pathsegments类似,但存在以下不同。

    对于pathlib模块的PureWindowsPath对象,路径中的\(反斜杠)会被转换为/(斜杠),如果一个位置参数表示不带盘符的根目录,那么该位置参数之前的位置参数将无效,除了盘符部分,比如,'C:\\a','\\b'(Windows)将得到路径C:/b

    # 在 Windows 系统中
    from pathlib import PurePath, PurePosixPath, PureWindowsPath
    # . 和一些 / 被消除,.. 被保留
    PurePath('./a', '..', 'b/.', 'c/')
    PureWindowsPath('a/../b/c')
    # a 失效,盘符 C 被保留,\ 被转换为 /
    PurePath(r'C:\a', r'\b')
    PureWindowsPath('C:/b')
    # a 失效,\ 被转换为 /
    PureWindowsPath('a', r'D:\b', 'c')
    PureWindowsPath('D:/b/c')
    # /etc 失效
    PurePosixPath('/etc', '/usr', 'a')
    PurePosixPath('/usr/a')

    pathlib 模块中的具体路径类

    与纯路径类不同,pathlib模块中的具体路径类提供了需要真实访问文件系统的功能,比如,如果一个真实路径对象包含相对路径,那么你可以通过该对象将相对路径转换为绝对路径。

    pathlib模块包含三个纯路径类,分别是PathPosixPathWindowsPath,其中,PathPurePath的派生类,PosixPathPathPurePosixPath的派生类,WindowsPathPathPureWindowsPath的派生类,当你尝试创建一个Path对象时,将根据当前的操作系统产生PosixPath(UNIX/Linux/macOS)或WindowsPath(Windows)类的实例。

    Path(*pathsegments)
    PosixPath(*pathsegments)
    WindowsPath(*pathsegments)

    无法在不支持的操作系统中创建 PosixPath 或 WindowsPath 对象

    在 Windows 系统中,你无法创建pathlib模块的PosixPath对象,这将导致异常pathlib._abc.UnsupportedOperation: cannot instantiate 'PosixPath' on your system(Python 3.13 之前的版本将引发异常NotImplementedError),因为该对象仅用于表示 UNIX/Linux/macOS 系统中的路径。

    在 UNIX/Linux/macOS 系统中,你无法创建pathlib模块的WindowsPath对象,这将导致异常pathlib._abc.UnsupportedOperation: cannot instantiate 'WindowsPath' on your system(Python 3.13 之前的版本将引发异常NotImplementedError),因为该对象仅用于表示 Windows 系统中的路径。

    # 在 Windows 系统中
    from pathlib import PosixPath
    # ERROR 不支持在 Windows 中创建 PosixPath 对象
    PosixPath()

    pathlib._abc.UnsupportedOperation: cannot instantiate 'PosixPath' on your system