Day 061 — 文件与路径操作 · 完成清单
✅ 学习检查表
- [ ] 掌握 os 模块的目录遍历和文件操作
- [ ] 理解 pathlib 的面向对象设计优势
- [ ] 能用 pathlib 替代 os.path 完成日常操作
- [ ] 掌握 shutil 的复制、移动、压缩功能
- [ ] 理解文件编码和路径安全的注意事项
- [ ] 运行过所有代码示例
📝 基础练习题
练习 1:目录统计工具
编写一个函数,用 pathlib 统计指定目录: - 文件总数和目录总数 - 总大小(人类可读格式,如 "1.2 GB") - 按后缀分组的文件数量 - 最大的 5 个文件 - 最旧的 5 个文件
练习 2:批量文件重命名
编写脚本,实现以下重命名模式:
- 将所有空格替换为下划线
- 将文件名转为小写
- 按序号重命名:photo_001.jpg, photo_002.jpg, ...
- 支持 dry-run 预览模式
练习 3:文件搜索器
实现一个文件搜索引擎,支持: - 按后缀搜索 - 按大小范围搜索 - 按修改时间搜索 - 按文件名模式搜索(支持通配符) - 输出结果为 JSON
🚀 进阶挑战题
挑战 1:智能备份工具
实现增量备份工具: - 只备份有变化的文件 - 支持保留历史版本(按日期) - 生成备份报告 - 支持恢复指定版本
挑战 2:重复文件检测
实现重复文件检测器: - 用文件大小做初步筛选 - 用 MD5 哈希做精确比对 - 输出重复文件组 - 支持选择保留策略(最新/最旧/手动)
挑战 3:文件整理助手
实现自动文件整理工具: - 按文件类型分类到对应目录 - 按日期创建子目录 - 处理文件名冲突 - 生成整理日志
💡 思考题答案提示
-
100 万文件统计:用
Path.rglob("*.log")配合生成器逐个处理,避免一次性加载所有文件到内存。os.walk也可以,但 pathlib 的 API 更清晰。 -
清理工具设计:用
Path.rglob("*.log")查找日志,检查stat().st_mtime判断时间,shutil.copy2+shutil.make_archive压缩,Path.unlink删除。 -
copy vs copy2:
copy只复制内容和权限,copy2还复制元数据(时间戳等)。备份场景必须用copy2,否则无法判断文件是否更新。 -
安全删除函数:先
p.exists()检查,p.is_symlink()跳过符号链接,检查p.resolve()是否在白名单目录内,最后p.unlink()。 -
os.listdir vs Path.iterdir:
os.listdir返回字符串列表,内存开销小;Path.iterdir返回 Path 对象,功能更丰富但有对象创建开销。处理大量文件时os.listdir略快。