【pathlib.Path Python 标准库中 `pathlib` 模块详解 一篇看会】

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.pathpathlib.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")
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

放飞自我的Coder

你的鼓励很棒棒哦~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值