简介
pathlib
模块是 Python
3.4中新增的标准库,它提供了面向对象的文件系统路径处理方法。pathlib
致力于解决直接操作文件路径字符串容易引发的错误,对路径提供了内置的多种处理方式,使用简单又功能强大。
在 pathlib
模块被引入之前,os.path
模块一直是 Python
中处理文件路径的首选。它包含许多操作路径的函数,如 os.path.join()
、os.path.exists()
等等。但是这些函数直接接收路径的字符串,非常容易导致路径拼接错误。
为了解决这个问题,Python
引入了 pathlib
,其设计灵感来源于 Shutil
模块。pathlib
提供了 Path
类来封装路径操作,更安全易用。
实现原理
pathlib
的核心是 Path
类,它将路径封装成一个对象,可以对其调用各种方法来处理文件系统路径。Path
的实现主要依赖 Python
的 PurePath
类提供的底层 C API
。PurePath
将路径分割成不同部分,通过组合操作实现路径功能。
Path
类对 PurePath
进行封装,提供面向对象的高级接口,如添加子路径、读取文件内容、检查路径是否存在等操作。
应用场景
pathlib
可广泛用于任何需要文件路径处理的场景,如
- 拼接路径时使用Path对象而不是字符串,避免手动处理操作系统特定的分隔符
- 检查文件状态、metadata、创建删除目录
- 读取写入文件内容
- 遍历目录下文件
- 将路径传给接受字符串的API
它是所有 Python
程序中处理路径的最佳选择。
优缺点
先列优点:
- 面向对象接口,简洁易用
- 避免直接字符串拼接使出错
- 提供多种文件系统方法
当然,也有缺点:
- Python 3.4以上才有,旧版本不支持
- 某些高级操作可能还需要os模块配合
代码示例
下面再来看个完整的示例,部分注释与代码执行结果写在了代码中间
from pathlib import Path
# 创建Path对象
p = Path('/usr/local')
# 组合子路径
sub_p = p / 'bin' / 'python'
# 查看父目录
print(sub_p.parent)
# /usr/local/bin
# 查看文件名称
print(sub_p.name)
# python
# 拼接路径字符串
print(str(sub_p))
# /usr/local/bin/python
# 检查路径是否存在
print(sub_p.exists())
# 遍历目录下所有文件
for f in p.iterdir():
print(f)
# 在目录下创建新目录
new_dir = p / 'temp'
new_dir.mkdir()
# 写入文本文件
text_file = new_dir / 'text.txt'
text_file.write_text('Hello World!')
# 读取文本文件
print(text_file.read_text())
# 重命名文件
text_file.rename('hello.txt')
总结
pathlib
为路径处理提供了更优雅更 Python
式的解决方案。它既保留了 os.path
的灵活性,又使代码更安全简洁。pathlib
是所有 Python
程序员必须掌握的重要知识点。