
前言每天下载的文件堆满桌面.zip、.pdf、.jpg 混在一起想找的时候翻半天。这件事其实完全可以交给脚本处理——今天我们就用 Python 写一个桌面文件自动整理器按文件类型自动分类到不同文件夹全程无依赖、开箱即用。这个脚本虽然只有 60 行代码但涉及路径操作、正则匹配、日志记录三个实用技能学会了可以扩展到任何批量文件处理场景。主题介绍我们要实现的功能扫描指定目录默认桌面的所有文件根据文件扩展名将文件移动到对应的分类文件夹文档、图片、视频、压缩包、代码等记录每次操作日志方便回查同名文件自动加后缀避免覆盖核心思路用os和shutil模块完成移动用字典映射扩展名到分类用logging记录轨迹。环境准备Python 3.8系统自带即可无需第三方库Windows 桌面路径C:\Users\用户名\DesktopmacOS 桌面路径~/DesktopLinux 桌面路径~/Desktop创建项目目录结构mkdir~/desktop-organizercd~/desktop-organizertouchorganizer.py organize_log.json实操步骤步骤 1定义分类规则先建一个扩展名到文件夹名的映射字典。这是整个脚本的核心配置# 扩展名 → 目标文件夹名CATEGORY_MAP{pdf:文档,doc:文档,docx:文档,txt:文档,md:文档,jpg:图片,jpeg:图片,png:图片,gif:图片,svg:图片,webp:图片,bmp:图片,mp4:视频,mov:视频,avi:视频,mkv:视频,mp3:音频,wav:音频,flac:音频,zip:压缩包,rar:压缩包,7z:压缩包,tar.gz:压缩包,py:代码,js:代码,html:代码,css:代码,exe:可执行,dmg:可执行,deb:可执行,}# 默认兜底分类DEFAULT_CATEGORY其他步骤 2编写整理逻辑完整可执行脚本organizer.py#!/usr/bin/env python3桌面文件自动整理工具importosimportshutilimportloggingfrompathlibimportPath# 配置日志logging.basicConfig(filenameorganize_log.json,levellogging.INFO,format%(asctime)s | %(message)s)CATEGORY_MAP{pdf:文档,doc:文档,docx:文档,txt:文档,md:文档,jpg:图片,jpeg:图片,png:图片,gif:图片,mp4:视频,mov:视频,mp3:音频,wav:音频,zip:压缩包,rar:压缩包,7z:压缩包,py:代码,js:代码,html:代码,}DEFAULT_CATEGORY其他defget_category(filename:str)-str:根据文件名返回分类文件夹名extPath(filename).suffix.lower().lstrip(.)returnCATEGORY_MAP.get(ext,DEFAULT_CATEGORY)defmove_file(src:Path,dest_dir:Path)-Path:移动文件同名时自动加 _1, _2 后缀dest_dir.mkdir(parentsTrue,exist_okTrue)destdest_dir/src.nameifdest.exists():stem,suffixsrc.stem,src.suffix counter1whiledest.exists():destdest_dir/f{stem}_{counter}{suffix}counter1shutil.move(str(src),str(dest))logging.info(f移动:{src.name}-{dest})returndestdeforganize(target_dir:strNone):扫描并整理目标目录iftarget_dirisNone:target_diros.path.expanduser(~/Desktop)rootPath(target_dir).resolve()ifnotroot.exists():print(f❌ 目录不存在:{root})returncount0foriteminroot.iterdir():ifnotitem.is_file():continueifitem.name.startswith(.):# 跳过隐藏文件continuecategoryget_category(item.name)dest_dirroot/category move_file(item,dest_dir)count1print(f✅ 完成共整理{count}个文件)logging.info(f 本次整理{count}个文件 )if__name____main__:organize()步骤 3运行脚本# 整理桌面默认python3 organizer.py# 整理指定目录python3 organizer.py -- /path/to/messy/folder运行后桌面会变成这样的结构Desktop/ ├── 文档/ │ ├── 简历.pdf │ └── 笔记.md ├── 图片/ │ ├── 截图.png │ └── 头像.jpg ├── 压缩包/ │ └── 素材包.zip ├── 代码/ │ └── app.js └── 其他/ └── README步骤 4表格对比 — 整理前后效果维度整理前整理后文件位置全部混在桌面根目录按类型分到子文件夹查找速度肉眼翻找30 秒直接进对应文件夹文件数量示例47 个文件平铺5 个文件夹各装 1-20 个重复文件风险手动改名容易出错脚本自动追加 _1, _2 后缀可追溯性无记录organize_log.json 记录每次操作步骤 5进阶 — 添加定时自动整理方案 ALinux / macOS 用 cron# 每周一、四早上 9 点自动整理09* *1,4cd~/desktop-organizerpython3 organizer.py方案 BWindows 用任务计划程序打开任务计划程序创建基本任务名称填桌面整理触发器选择每周指定周一和周四操作选择启动程序程序填python.exe参数填organizer.py的绝对路径方案 C脚本内加防重复标记MARKER_FILEPath.home()/.desktop_organize_donedefshould_run()-bool:避免同一天重复整理ifMARKER_FILE.exists():last_runMARKER_FILE.stat().st_mtimeif(time.time()-last_run)86400:# 24 小时内returnFalsereturnTrue总结今天用 60 行 Python 代码实现了一个桌面文件自动整理器核心收获pathlib.Path** 比os.path更直观** —item.is_file()、item.suffix写起来更清晰同名处理是实战必须考虑的细节— 加后缀_1的逻辑虽然简单但能避免真实场景中的数据丢失日志记录是脚本工程的标配— 有了日志出问题能快速定位也能做统计这个脚本可以按自己需求扩展比如加入移动前先备份到 trash 目录、“按创建时间分月归档”、“整合到 Hermes 定时任务里每天自动跑”。下一步可以试试给脚本加 CLI 参数解析argparse让用户指定目标目录、开启 dry-run 预览模式进一步工程化。