python pathlib.Path
pathlib 是 Python 3.4 引入的标准库,提供了一种面向对象的方式来处理文件系统路径。它用 Path 对象取代了传统的字符串路径操作,使代码更直观、更健壮、更易于维护。
Path 对象的构成
pathlib 模块的核心是 Path 类,它根据运行的操作系统,自动选择 PosixPath (Unix/Linux/macOS) 或 WindowsPath (Windows)。
要理解 Path,首先需要了解其构成。pathlib 将路径分为两种类型:
-
纯路径 (Pure Paths):只进行字符串计算,不访问文件系统。例如,在 Unix 系统上处理 Windows 路径时非常有用。
-
具体路径 (Concrete Paths):继承自纯路径,并增加了文件系统 I/O 操作。日常开发中,我们主要使用的
Path类就属于这一类。
1. 创建 Path 对象
from pathlib import Path
# 从字符串创建
p1 = Path('/home/user/docs/report.txt')
# 从多个部分自动拼接
p2 = Path('home', 'user', 'docs', 'report.txt')
# 获取特殊目录
home = Path.home() # 用户主目录[reference:15]
cwd = Path.cwd() # 当前工作目录[reference:16]
2. 路径拼接与解析
Python Pathlib:现代文件路径处理指南 – Kanaries
拼接:使用 / 运算符,比 os.path.join() 更直观且跨平台
p = Path('/home/user') / 'docs' / 'report.txt'
分解:通过属性直接访问路径的各部分
p = Path('/home/user/docs/report.txt')
print(p.parent) # /home/user/docs
print(p.name) # report.txt
print(p.stem) # report (不含扩展名)[reference:21]
print(p.suffix) # .txt
print(p.parents[0]) # /home/user/docs (父路径)[reference:22]
3.文件系统查询与判断
p = Path('/home/user/docs/report.txt')
p.exists() # 路径是否存在[reference:23]
p.is_file() # 是否是文件[reference:24]
p.is_dir() # 是否是目录[reference:25]
p.stat() # 获取文件状态信息 (如大小、修改时间)
4. 目录与文件操作
目录操作:
dir_path = Path('new_folder')
dir_path.mkdir(parents=True, exist_ok=True) # 创建目录,自动创建父目录,存在也不报错[reference:26]
文件读写:Path 对象内置了便捷的读写方法
file_path = Path('example.txt')
file_path.write_text('Hello, World!') # 写入文本
content = file_path.read_text() # 读取文本
遍历目录:
# iterdir(): 遍历当前目录下的所有内容[reference:30]
for item in Path('.').iterdir():
print(item)
# glob(): 进行模式匹配[reference:31][reference:32]
py_files = list(Path('.').glob('*.py')) # 当前目录下所有 .py 文件
all_py_files = list(Path('.').rglob('*.py')) # 递归查找所有 .py 文件[reference:33][reference:34]
注意事项:
-
性能考量:
pathlib是高级封装,相比直接操作字符串的os.path可能略慢。但在大多数文件 I/O 场景下,这个性能差异可以忽略不计。在极高频的路径字符串处理(如解析数百万行日志)中,需注意其性能。 -
路径类型:
Path对象的方法(如open())通常要求路径是字符串。虽然Path对象可直接传给需要字符串路径的函数,但若遇到类型错误,可用str(path)转换。 -
resolve()与符号链接:p.resolve()可获取绝对路径并解析符号链接。但在符号链接较多的环境中,频繁调用可能影响性能。 -
路径规范化:
pathlib会自动处理路径中的冗余分隔符和..。但需注意,在 Windows 上,对某些特殊长路径的处理可能略有不同。
总结
pathlib 是 Python 处理文件系统路径的现代、推荐方式。它通过面向对象的 Path 对象,将路径操作统一起来,使代码更清晰、更健壮、更易于跨平台。
对于绝大多数文件与路径操作,从 os.path 转向 pathlib 都能显著提升代码质量。建议在新项目中优先使用 pathlib,并逐步在旧项目中重构路径处理相关的代码。
openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构
更多推荐


所有评论(0)