这个Python脚本帮我每天节省1小时,你还在手动整理文件吗?
每天花1小时整理文件、重命名、归类?这个脚本只需要运行一次,之后自动完成。
问题:你的时间花在哪了?
你可能有过这样的经历:
这不是你一个人的问题,这是90%办公族的时间黑洞。
我用了这个Python脚本之后,每天节省1小时,一年就是365小时。
365小时是什么概念?
先说结论:这个脚本能做什么
场景一:自动分类文件
你的下载文件夹:├── 发票.pdf├── 合同.docx├── 照片.jpg├── 发票(2).pdf├── 安装包.exe├── 笔记.md└── ...分类后:├── 📁 文档/│ ├── 合同.docx│ └── 笔记.md├── 📁 图片/│ └── 照片.jpg├── 📁 PDF/│ ├── 发票.pdf│ └── 发票(2).pdf└── 📁 安装包/ └── 安装包.exe
场景二:批量重命名
你的相册:├── DSC001.jpg├── DSC002.jpg├── IMG_20230101.jpg├── screenshot_001.png└── ...重命名后:├── 旅行-2023-01-01-01.jpg├── 旅行-2023-01-01-02.jpg├── 旅行-2023-01-01-03.jpg├── 工作-2023-06-15-截图1.png└── ...
场景三:自动备份
你的工作文件:├── 项目A/├── 项目B/└── ...自动备份到:├── 备份-2026-08-04/│ ├── 项目A/│ └── 项目B/└── 备份-2026-08-03/ ├── 项目A/ └── 项目B/
开始动手:写你的第一个自动化脚本
第一步:环境准备
需要安装的库:
pip install shutil pathlib os datetime
这些都是Python标准库,不需要额外安装。
第二步:基础分类脚本
这是最核心的脚本,按文件类型自动分类:
# auto_organize.pyimport shutilimport osfrom pathlib import Pathfrom datetime import datetime# 配置你的文件夹source_folder = Path("~/Downloads").expanduser()target_folder = Path("~/Organized").expanduser()# 文件类型映射FILE_TYPES = {# 文档类'.pdf': 'PDF文档','.doc': 'Word文档','.docx': 'Word文档','.xls': 'Excel表格','.xlsx': 'Excel表格','.ppt': 'PPT演示','.pptx': 'PPT演示','.md': 'Markdown','.txt': '文本文件',# 图片类'.jpg': '图片','.jpeg': '图片','.png': '图片','.gif': '图片','.bmp': '图片','.svg': '图片','.webp': '图片',# 视频类'.mp4': '视频','.avi': '视频','.mov': '视频','.mkv': '视频',# 音频类'.mp3': '音频','.wav': '音频','.flac': '音频',# 压缩包'.zip': '压缩包','.rar': '压缩包','.7z': '压缩包',# 安装包'.exe': '安装包','.dmg': '安装包','.apk': '安装包',}deforganize_files():# 创建目标文件夹(如果不存在) target_folder.mkdir(parents=True, exist_ok=True)# 统计信息 stats = {} moved_count = 0 skipped_count = 0# 遍历源文件夹for file in source_folder.iterdir():if file.is_file(): ext = file.suffix.lower()# 查找对应的文件夹类型if ext in FILE_TYPES: folder_name = FILE_TYPES[ext]else: folder_name = '其他文件'# 创建分类文件夹 category_folder = target_folder / folder_name category_folder.mkdir(parents=True, exist_ok=True)# 生成目标文件名(避免重复) target_path = category_folder / file.name counter = 1while target_path.exists(): stem = file.stem suffix = file.suffix target_path = category_folder / f"{stem}_{counter}{suffix}" counter += 1# 移动文件 shutil.move(str(file), str(target_path)) moved_count += 1# 统计 stats[folder_name] = stats.get(folder_name, 0) + 1# 输出报告 print(f"\n{'='*50}") print(f"文件整理完成!") print(f"{'='*50}") print(f"总共移动: {moved_count} 个文件") print(f"跳过: {skipped_count} 个文件") print(f"\n分类统计:")for folder, count in sorted(stats.items(), key=lambda x: -x[1]): print(f" {folder}: {count} 个") print(f"{'='*50}\n")if __name__ == "__main__": organize_files()
使用方法:
# 运行脚本python auto_organize.py# 或者加入定时任务,每周自动运行
第三步:批量重命名脚本
这个脚本按日期和类型重命名文件:
# rename_files.pyimport osfrom pathlib import Pathfrom datetime import datetimeimport shutilsource_folder = Path("~/Photos").expanduser()target_folder = Path("~/Photos_Organized").expanduser()defrename_by_date(): target_folder.mkdir(parents=True, exist_ok=True)for file in source_folder.iterdir():if file.is_file():# 获取文件修改时间 mtime = file.stat().st_mtime dt = datetime.fromtimestamp(mtime) date_str = dt.strftime("%Y-%m-%d")# 生成新文件名 ext = file.suffix new_name = f"{date_str}-{file.stem}{ext}"# 避免重名 counter = 1 final_name = new_namewhile (target_folder / final_name).exists(): final_name = f"{date_str}-{file.stem}_{counter}{ext}" counter += 1# 移动并重命名 shutil.move(str(file), str(target_folder / final_name)) print(f"已重命名: {file.name} → {final_name}")if __name__ == "__main__": rename_by_date()
第四步:自动备份脚本
# auto_backup.pyimport shutilfrom pathlib import Pathfrom datetime import datetimeimport ossource_folder = Path("~/Work").expanduser()backup_root = Path("~/Backups").expanduser()defcreate_backup():# 创建备份目录 date_str = datetime.now().strftime("%Y-%m-%d") backup_folder = backup_root / f"backup-{date_str}" backup_folder.mkdir(parents=True, exist_ok=True)# 复制文件 count = 0for item in source_folder.iterdir():if item.is_dir():# 复制整个目录 shutil.copytree(item, backup_folder / item.name) count += 1elif item.is_file():# 复制单个文件 shutil.copy2(item, backup_folder / item.name) count += 1 print(f"备份完成!共 {count} 个文件/文件夹")# 保留最近7天的备份 cleanup_old_backups(backup_root, keep_days=7)defcleanup_old_backups(backup_root, keep_days):"""清理过期的备份""" now = datetime.now()for folder in backup_root.iterdir():if folder.is_dir() and folder.name.startswith("backup-"):# 获取备份日期try: backup_date_str = folder.name.replace("backup-", "") backup_date = datetime.strptime(backup_date_str, "%Y-%m-%d") age_days = (now - backup_date).daysif age_days > keep_days: shutil.rmtree(folder) print(f"已删除过期备份: {folder.name}")except:passif __name__ == "__main__": create_backup()
进阶:让脚本自动运行
方法一:定时任务(推荐)
Mac/Linux 用户:
编辑 crontab:
crontab -e
添加以下内容:
# 每天凌晨2点自动整理下载文件夹0 2 * * * /usr/bin/python3 /path/to/auto_organize.py# 每天凌晨3点自动备份工作目录0 3 * * * /usr/bin/python3 /path/to/auto_backup.py
Windows 用户:
使用任务计划程序:
- 按
Win + R,输入 taskschd.msc - 参数填写:
/path/to/auto_organize.py
方法二:文件监控(实时自动)
这个脚本会实时监控文件夹,有新文件时自动分类:
# monitor_folder.pyimport osimport timefrom pathlib import Pathimport shutilwatch_folder = Path("~/Downloads").expanduser()target_folder = Path("~/Organized").expanduser()# 文件类型映射(同前面)FILE_TYPES = {'.pdf': 'PDF文档','.doc': 'Word文档','.docx': 'Word文档','.jpg': '图片','.png': '图片','.mp4': '视频',# ... 更多类型}defprocess_new_files():"""处理新文件"""for file in watch_folder.iterdir():if file.is_file(): ext = file.suffix.lower()if ext in FILE_TYPES: folder_name = FILE_TYPES[ext] category_folder = target_folder / folder_name category_folder.mkdir(parents=True, exist_ok=True)# 移动文件 shutil.move(str(file), str(category_folder / file.name))defmain(): print("开始监控文件夹...") print(f"监控: {watch_folder}") print(f"目标: {target_folder}") print("按 Ctrl+C 停止监控\n") last_check = set()try:whileTrue: current_files = set(f.name for f in watch_folder.iterdir() if f.is_file())# 检测新文件 new_files = current_files - last_checkif new_files: print(f"发现新文件: {new_files}") process_new_files() last_check = current_files time.sleep(5) # 每5秒检查一次except KeyboardInterrupt: print("\n监控已停止")if __name__ == "__main__": main()
实际效果对比
一年节省时间:约100小时
常见问题解决
问题1:脚本运行报错
错误信息:PermissionError
解决方案:
# 给脚本执行权限chmod +x auto_organize.py# 或者用Python直接运行python auto_organize.py
问题2:文件移动失败
原因:目标文件夹权限问题
解决方案:
# 检查权限ls -la ~/Organized# 修改权限chmod 755 ~/Organized
问题3:同名文件被覆盖
原因:脚本没有处理重名情况
解决方案: 脚本已内置重名处理(自动添加数字后缀),确保目标路径正确即可。
下一步行动
今天就能做:
- ✅ 修改路径配置(source_folder、target_folder)
本周可以尝试:
总结
自动化不是玄学,本质上是把重复劳动交给机器。
一个脚本,每天节省1小时,一年就是365小时。
这365小时,你可以用来:
不要让你的时间,浪费在重复劳动上。
觉得有用?关注公众号「智思时代」,获取更多自动化提效技巧。
有问题欢迎留言,我逐一回复。