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/docsprint(p.name) # report.txtprint(p.stem) # report (不含扩展名)[reference:21]print(p.suffix) # .txtprint(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(parentsTrue, exist_okTrue) # 创建目录自动创建父目录存在也不报错[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并逐步在旧项目中重构路径处理相关的代码。