Python pathlib模块类结构与路径操作详解
本文深入解析Python pathlib模块的核心类结构,详细对比PurePath与Path类的功能差异。通过具体代码示例,演示如何创建路径对象、处理不同操作系统的路径格式(Windows与UNIX),以及利用斜杠运算符拼接路径。文章还涵盖了路径属性的提取、字符串转换及大小写敏感性判断,帮助开发者高效进行跨平台文件路径管理。
pathlib模块类结构概述
pathlib 模块提供了一系列用于处理文件路径的类,其继承体系如图 1 所示。
图 1 pathlib模块中类的组织结构

如图 1 所示,箭头指示了类之间的继承关系。以 PurePosixPath 和 PurePath 为例,PurePosixPath 是 PurePath 的子类。
pathlib 模块主要处理各类操作系统中的路径字符串,包括绝对路径和相对路径。以下简要介绍图 1 中几个关键类的具体功能:
- PurePath 类将路径视为普通字符串,支持将多个字符串拼接为当前操作系统兼容的路径格式,并能判断两个路径是否相等。需要注意的是,PurePath 并不验证路径在文件系统中是否真实存在。
- PurePosixPath 和 PureWindowsPath 继承自 PurePath。前者专门用于处理 UNIX(含 Mac OS X)风格的路径,后者则用于处理 Windows 风格的路径。
- Path 类与前三个类不同,它处理的路径必须是真实存在的。Path 类提供了检查路径是否存在的方法。
- PosixPath 和 WindowsPath 是 Path 的子类,分别用于处理 Unix(Mac OS X)风格和 Windows 风格的路径。
需注意,UNIX 和 Windows 操作系统的路径格式存在显著差异,主要体现在根路径和分隔符上。UNIX 系统的根路径为斜杠(/),而 Windows 系统为盘符(如 C:);UNIX 使用斜杠(/)作为分隔符,Windows 则使用反斜杠(\)。
PurePath类构造与路径处理
PurePath 类的用法
PurePath 类(包括其子类 PurePosixPath 和 PureWindowsPath)提供了丰富的构造方法、实例方法和属性供开发者使用。
PurePath类构造方法
使用 PurePath 类时,需注意操作系统的差异。在 UNIX 或 Mac OS X 系统上,PurePath 构造函数实际返回 PurePosixPath 对象;而在 Windows 系统上,则返回 PureWindowsPath 对象。
当然,开发者也可以直接使用 PurePosixPath 或 PureWindowsPath 类来创建特定操作系统风格的路径对象。
例如,在 Windows 系统上执行以下代码:
from pathlib import * # 创建PurePath,实际上使用PureWindowsPath path = PurePath('my_file.txt') print(type(path))
程序执行结果为:
<class 'pathlib.PureWindowsPath'>
显然,在 Windows 操作系统环境下,使用 PurePath 构造函数创建的是 PureWindowsPath 类对象。
读者可自行在 UNIX 或 Mac OS X 系统上运行该程序以验证结果。
此外,PurePath 在创建对象时支持传入多个路径字符串,这些字符串会被拼接成一个完整的路径字符串。例如:
from pathlib import * # 创建PurePath,实际上使用PureWindowsPath path = PurePath('http:','c.biancheng.net','python') print(path)
程序执行结果为:
http:\c.biancheng.net\python
由于本机为 Windows 系统,输出结果为符合 Windows 平台规范的路径。若需在 Windows 系统上生成 UNIX 风格的路径字符串,应使用 PurePosixPath 类。例如:
from pathlib import * path = PurePosixPath('http:','c.biancheng.net','python') print(path)
程序执行结果为:
http:/c.biancheng.net/python
值得一提的是,若在使用 PurePath 构造函数时不传入任何参数,等同于传入了点号 '.'(代表当前路径)作为参数。例如:
from pathlib import * path = PurePath() print(path) path = PurePath('.') print(path)
程序执行结果为:
.
.
另外,如果传给 PurePath 构造方法的多个参数中包含多个根路径,则只有最后一个根路径及其后的子路径会生效。例如:
from pathlib import * path = PurePath('C://','D://','my_file.txt') print(path)
程序执行结果为:
D:\my_file.txt
注意,对于 Windows 风格的路径,只有盘符(如 C、D 等)才被视为根路径。
需要注意的是,如果传给 PurePath 构造方法的参数中包含多余的斜杠或点号(.,表示当前路径),它们会被直接忽略(但 .. 不会被忽略)。举个例子:
from pathlib import * path = PurePath('C://./my_file.txt') print(path)
程序执行结果为:
C:\my_file.txt
PurePath 类还重载了各种比较运算符。对于同种风格的路径字符串,可以判断是否相等或比较大小(实质是字符串比较);对于不同种风格的路径字符串,只能判断是否相等(显然不相等),不能比较大小。
举个例子:
from pathlib import * # Unix风格的路径区分大小写 print(PurePosixPath('C://my_file.txt') == PurePosixPath('c://my_file.txt')) # Windows风格的路径不区分大小写 print(PureWindowsPath('C://my_file.txt') == PureWindowsPath('c://my_file.txt'))
程序执行结果为:
False True
比较特殊的是,PurePath 类对象支持直接使用斜杠(/)作为多个字符串之间的连接符,例如:
from pathlib import * path = PurePosixPath('C://') print(path / 'my_file.txt')
程序执行结果为:
C:/my_file.txt
通过上述方式构建的路径本质上仍是字符串,因此可以使用 str() 函数将 PurePath 对象转换为字符串。例如:
from pathlib import * # Unix风格的路径区分大小写 path = PurePosixPath('C://','my_file.txt') print(str(path))
程序执行结果为:
C:/my_file.txt
PurePath实例属性与方法
PurePath类实例属性和实例方法
表 1 列出了常用的 PurePath 类实例方法和属性。由于 PurePath 的操作对象本质上是字符串,表 1 中的实例属性和方法实质上也是对字符串进行操作。
表 1 PurePath 类属性和方法
| 类实例属性和实例方法名 | 功能描述 |
|---|---|
| PurePath.parts | 返回路径字符串中所包含的各部分。 |
| PurePath.drive | 返回路径字符串中的驱动器盘符。 |
| PurePath.root | 返回路径字符串中的根路径。 |
| PurePath.anchor | 返回路径字符串中的盘符和根路径。 |
| PurePath.parents | 返回当前路径的全部父路径。 |
| PurPath.parent | 返回当前路径的上一级路径,相当于 parents[0] 的返回值。 |
| PurePath.name | 返回当前路径中的文件名。 |
| PurePath.suffixes | 返回当前路径中的文件所有后缀名。 |
| PurePath.suffix | 返回当前路径中的文件后缀名。相当于 suffixes 属性返回的列表的最后一个元素。 |
| PurePath.stem | 返回当前路径中的主文件名。 |
| PurePath.as_posix() | 将当前路径转换成 UNIX 风格的路径。 |
| PurePath.as_uri() | 将当前路径转换成 URL。只有绝对路径才能转换,否则将会引发 ValueError。 |
| PurePath.is_absolute() | 判断当前路径是否为绝对路径。 |
| PurePath.joinpath(*other) | 将多个路径连接在一起,作用类似于前面介绍的斜杠(/)连接符。 |
| PurePath.match(pattern) | 判断当前路径是否匹配指定通配符。 |
| PurePath.relative_to(*other) | 获取当前路径中去除基准路径之后的结果。 |
| PurePath.with_name(name) | 将当前路径中的文件名替换成新文件名。如果当前路径中没有文件名,则会引发 ValueError。 |
| PurePath.with_suffix(suffix) | 将当前路径中的文件后缀名替换成新的后缀名。如果当前路径中没有后缀名,则会添加新的后缀名。 |
对于表 1 中列出的实例属性和方法的具体用法,此处不再逐一演示,感兴趣的读者可自行尝试其功能。
Path类的真实路径操作
Path类的功能和用法
与 PurePath 类相比,Path 类的最大区别在于支持对路径的真实性进行判断。
从图 1 可以看出,Path 是 PurePath 的子类。因此,Path 类不仅支持 PurePath 提供的各种构造函数、实例属性和方法,还提供了验证路径字符串有效性的方法,甚至能判断路径对应的是文件还是文件夹。如果是文件,还支持进行读写等操作。
与 PurePath 类似,Path 类也有两个子类:PosixPath(表示 UNIX 风格的路径)和 WindowsPath(表示 Windows 风格的路径)。
由于文章篇幅有限,Path 类的属性和方法众多,此处不再一一讲解。感兴趣的读者可通过官方手册 https://docs.python.org/3/library/pathlib.html 进行查阅。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持本站。
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













