️ 今日题目

如何用 pathlib 优雅地完成以下任务?

  1. 拼接路径(跨平台兼容)
  2. 判断文件是否存在
  3. 遍历目录下所有 .py 文件并打印大小
  4. 批量重命名文件
❌ 老派写法:os.path+ 字符串拼接

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))

⚠️ 问题:

  • 路径是字符串,无法链式操作
  • 代码冗长,可读性差
  • 容易因斜杠方向出错(尤其跨平台)
✅ 新派写法:pathlib.Path(Python 3.4+)

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() 递归匹配
  • 路径比较用 ==,不是字符串比较(更可靠)

打开网易新闻 查看精彩图片