Python自动整理截图需优先从文件名提取时间戳,失败则回退到文件元数据时间;按年/月/日创建多级目录,安全移动并处理重名,支持命令行参数与dry-run调试。

用Python自动整理截图,核心是提取文件创建时间或修改时间,按年月日分文件夹归类。关键不在“智能”,而在准确读取时间、避免覆盖重名、适配不同系统的时间字段差异。
提取截图的真实时间戳
Windows截图默认用系统当前时间命名(如“屏幕截图(1).png”),但实际时间藏在文件元数据里;macOS和部分安卓投屏截图则常带时间戳在文件名中(如“Screenshot 2024-05-20 at 14.32.18.png”)。所以优先尝试从文件名解析,失败再 fallback 到 os.path.getmtime() 或 os.stat().st_birthtime(macOS)。
- 用 re.search(r'(\d{4}-\d{2}-\d{2}).*(\d{2}\.\d{2}\.\d{2})', name) 匹配常见 macOS/ iOS 截图名
- 对 Windows 默认命名,直接取 os.path.getctime(path)(创建时间),但注意:NTFS 下该值可能被复制/移动操作刷新,此时改用 getmtime 更稳妥
- 统一转为 datetime 对象,便于后续格式化成“2024/05/20”这类路径
按时间生成多级目标路径
不建议平铺所有截图到一个文件夹。推荐结构:./Screenshots/2024/05/20/,这样既清晰又方便 Finder / 文件管理器按年份筛选。
- 用 dt.strftime('%Y/%m/%d') 生成路径字符串,再用 os.makedirs(path, exist_ok=True) 一键建好三级目录
- 如果某天截图超百张,可加二级子目录如 2024/05/20/AM 和 2024/05/20/PM,靠 dt.hour 判断
- 路径中避免空格和中文,全部用标准 ASCII 字符,兼容 Linux/macOS/Windows
安全移动 + 重名处理
直接 shutil.move 可能因重名覆盖旧文件。必须检查目标路径是否已存在同名文件。
立即学习“Python免费学习笔记(深入)”;
- 先 os.path.exists(dst_path),存在则在原文件名后加序号,如 “Screenshot (1).png” → “Screenshot (1)_001.png”
- 用 while os.path.exists(dst) 循环递增编号,直到找到可用名
- 移动前打印操作日志(如 “→ 2024/05/20/Screenshot_20240520_143218.png”),方便出错回溯
封装成可配置的命令行工具
加个简单参数支持,就能复用在不同场景:
- 用 argparse 支持 -s/--source 指定源文件夹,-d/--dest 指定整理根目录,默认都是当前目录
- 加 --dry-run 参数,只打印将要执行的操作,不真实移动,调试必备
- 支持扩展名过滤:--ext .png .jpg .webp,避免误动其他文件
- 最后加一句 print(f"✅ 整理完成:{moved_count} 个文件"),体验更友好
基本上就这些。不复杂但容易忽略细节——比如 Windows 上 getctime 不可靠、macOS 文件名空格导致正则失效、路径斜杠在 Windows 要用反斜杠(但 os.path.join 或 pathlib 会自动处理)。写完跑一遍 dry-run,再正式执行,稳得多。










