️ 今日题目
如何用 pathlib 优雅地完成以下任务?
- 拼接路径(跨平台兼容)
- 判断文件是否存在
- 遍历目录下所有 .py 文件并打印大小
- 批量重命名文件
import os# 拼接路径(Windows 用 \,Linux 用 /,容易出错)filepath = os.path.join('project', 'src', 'main.py')# 判断存在if os.path.exists(filepath): size = os.path.getsize(filepath)# 遍历 .py 文件for root, _, files in os.walk('project'): for f in files: if f.endswith('.py'): print(os.path.join(root, f))⚠️ 问题:
- 路径是字符串,无法链式操作
- 代码冗长,可读性差
- 容易因斜杠方向出错(尤其跨平台)
from pathlib import Path# 1. 创建路径对象(自动处理平台差异)p = Path('project') / 'src' / 'main.py'# 或:p = Path('project/src/main.py')# 2. 判断文件是否存在 & 获取大小if p.exists(): print(f"Size: {p.stat().st_size} bytes")# 3. 遍历所有 .py 文件并打印大小for py_file in Path('project').rglob('*.py'): print(f"{py_file} → {py_file.stat().st_size}B")核心优势:路径是对象,支持方法链 + 运算符重载!
常用操作速查表
操作
os.path 写法
pathlib 写法
拼接路径
os.path.join('a', 'b')
Path('a') / 'b'
获取父目录
os.path.dirname(p)
p.parent
文件名
os.path.basename(p)
p.name
后缀
os.path.splitext(p)[1]
p.suffix
判断是文件
os.path.isfile(p)
p.is_file()
读取文本
open(p).read()
p.read_text()
写入文本
open(p, 'w').write(s)
p.write_text(s)
实战:批量重命名.txt为.md
from pathlib import Pathdocs = Path('notes')for txt in docs.glob('*.txt'): md = txt.with_suffix('.md') # 自动替换后缀 txt.rename(md) print(f"Renamed {txt.name} → {md.name}")✅ 安全、简洁、无需手动拼接新文件名!
⚠️ 注意事项
- Path 对象不可变,所有操作返回新对象
- glob() 只匹配当前层,rglob() 递归匹配
- 路径比较用 ==,不是字符串比较(更可靠)
打开网易新闻 查看精彩图片
热门跟贴