os.path,pathlib 模块,纯路径类,具体路径类介绍
关注 1421
os.path,pathlib 模块
对于文件系统中的路径,Python 提供了os.path
和pathlib
模块来处理他们,其中os.path
模块包含大量与路径相关的函数,而pathlib
模块则包含与路径相关的类。os.path
模块与pathlib
模块所实现的效果基本一致,但也存在一些差异。
pathlib
模块中的类,被划分为纯路径类和具体路径类,我们会对他们逐一介绍。
pathlib 模块中的纯路径类
pathlib
模块中的纯路径类不提供需要真实访问文件系统的功能,比如,如果一个纯路径对象包含相对路径,那么你无法通过该对象将相对路径转换为绝对路径。
pathlib
模块包含三个纯路径类,分别是PurePath
,PurePosixPath
和PureWindowsPath
,其中,PurePosixPath
和PureWindowsPath
是PurePath
的派生类,当你尝试创建一个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
模块的PurePosixPath
或PureWindowsPath
类的实例,无论当前的操作系统是什么。
PurePosixPath(*pathsegments)
PureWindowsPath(*pathsegments)
- pathsegments 参数
可变参数
pathsegments
与PurePath
构造器中的可变参数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
模块包含三个纯路径类,分别是Path
,PosixPath
和WindowsPath
,其中,Path
是PurePath
的派生类,PosixPath
是Path
和PurePosixPath
的派生类,WindowsPath
是Path
和PureWindowsPath
的派生类,当你尝试创建一个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