os.path,pathlib 模块,纯路径类,具体路径类介绍
关注 1800
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