pathlib
面向对象的文件系统路径。对于底层的路径字符串操作,你也可以使用 os.path 模块。pathlib 在 Python 3.4 引入,提供跨平台的路径表示与操作。
路径类型概览
pathlib 的类层次结构设计非常精妙,主要分为纯路径(Pure Paths)和具体路径(Concrete Paths)两类:
- 纯路径(Pure Paths):当你只想做路径计算,或者在 Linux 服务器上解析处理别人发来的 Windows 路径字符串时使用。
- 具体路径(Concrete Paths):包含了真实的磁盘读写、文件判断等 I/O 操作。
日常开发中导入和使用 Path 即可,这是因为 Path 是一个工厂类。当你实例化它时,它会自动根据你当前运行的操作系统(Windows 还是 Mac/Linux),在底层实例化为 WindowsPath 或 PosixPath。
这种设计让你写的代码可以“一次编写,到处运行”。
路径的基础操作
pathlib 通过重载 __truediv__ 和 __rtruediv__, 实现把/ 运算符重载为路径拼接。
from pathlib import Path
# 当前目录
p = Path('.')
# 右侧拼接
path = p / 'docs' / 'readme.txt'
# 左侧拼接
path = '/etc' / Path('passwd')
print(path.name)
# 输出:readme.txt
以 p = Path('/usr/share/data/archive.tar.gz') 为例:
| 属性 / 方法 | 说明 | 示例结果 |
|---|---|---|
name | 路径的最后一段(通常为文件名或目录名),包含后缀 | 'archive.tar.gz' |
stem | 文件名主要部分(即去掉最后一个后缀的部分) | 'archive.tar' |
suffix | 最后一个后缀(扩展名) | '.gz' |
suffixes | 所有后缀的列表 | ['.tar', '.gz'] |
parent | 父目录(返回一个新的 Path 对象) | Path('/usr/share/data') |
parents | 包含所有父目录的可切片序列(祖先目录序列) | p.parents[1] 等价于 p.parent.parent |
parts |