Path
是 Python 标准库中 pathlib
模块提供的一个面向对象的路径操作类,用来优雅、简洁地处理文件和目录路径。相比传统的 os.path
模块,Path
更直观、功能更强大。
一、基础用法:创建 Path 对象
from pathlib import Path
# 当前目录
p = Path('.')
# 绝对路径
p = Path('/home/user/data')
# 相对路径
p = Path('data/file.txt')
二、常用属性和方法
1. 路径拼接(推荐用 / 代替 join)
p = Path('/home/user')
new_path = p / 'documents' / 'file.txt' # 自动拼接为 /home/user/documents/file.txt
等价于传统写法:
import os
os.path.join('/home/user', 'documents', 'file.txt')
2. 常用属性
p = Path('/home/user/data/file.txt')
p.name # 'file.txt' → 文件名(含后缀)
p.stem # 'file' → 文件名(不含后缀)
p.suffix # '.txt' → 后缀
p.suffixes # ['.tar', '.gz'] → 多重后缀情况
p.parent # '/home/user/data' → 上一级目录
p.parts # ('/', 'home', 'user', 'data', 'file.txt') → 分段
3. 文件/目录检查
p.exists() # 是否存在
p.is_file() # 是否是文件
p.is_dir() # 是否是目录
p.is_absolute() # 是否是绝对路径
4. 创建目录、文件
Path('new_dir').mkdir() # 创建目录
Path('new_dir/sub_dir').mkdir(parents=True, exist_ok=True)
Path('file.txt').touch() # 创建空文件
5. 删除文件、目录
Path('file.txt').unlink() # 删除文件
Path('empty_dir').rmdir() # 删除空目录
6. 遍历目录内容
p = Path('.')
# 获取当前目录下所有文件和目录
for item in p.iterdir():
print(item)
# 获取所有特定类型的文件(递归)
for file in p.rglob('*.txt'):
print(file)
# 获取一级目录下所有txt文件
for file in p.glob('*.txt'):
print(file)
7. 读取和写入文件
# 写入
Path('hello.txt').write_text('Hello, world!', encoding='utf-8')
# 读取
text = Path('hello.txt').read_text(encoding='utf-8')
# 读写二进制
Path('img.png').write_bytes(b'\x89PNG...')
data = Path('img.png').read_bytes()
8. 路径操作:resolve、absolute、relative_to
Path('data/file.txt').resolve() # 获取绝对路径(解析符号链接)
Path('data/file.txt').absolute() # 获取绝对路径(不解析符号链接)
Path('/home/user/data/file.txt').relative_to('/home/user') # → data/file.txt
9. 修改路径属性(不修改实际文件)
p = Path('/home/user/file.txt')
new_p = p.with_name('new.txt') # 替换文件名
new_p = p.with_suffix('.md') # 替换后缀
三、对比 os.path
操作 | os.path | pathlib.Path |
---|---|---|
拼接路径 | os.path.join(a, b) | Path(a) / b |
获取文件名 | os.path.basename(path) | Path(path).name |
获取目录名 | os.path.dirname(path) | Path(path).parent |
创建目录 | os.mkdir(path) | Path(path).mkdir() |
判断存在性 | os.path.exists(path) | Path(path).exists() |
遍历目录 | os.listdir(path) | Path(path).iterdir() |
四、小技巧
1. 配合 shutil
使用 Path
对象:
import shutil
shutil.copy(Path('a.txt'), Path('backup/a.txt'))
2. 快速查找特定文件:
files = list(Path('.').rglob('*.py'))
3. 结合 f-string 构建路径:
Path(f"model_output/{model_name}.pth")