ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

用 Python 自动整理文件、重命名、分类电脑文件夹

2026/8/4 18:31:02 拓冰建站 浏览量
用 Python 自动整理文件、重命名、分类电脑文件夹 用 Python 自动整理文件、重命名、分类电脑文件夹告别混乱的桌面和下载文件夹几行 Python 代码让一切井井有条。一、为什么需要自动整理每个人大概都有过这样的经历下载文件夹里堆了 3000 个文件找东西靠肉眼翻桌面塞满截图、文档、安装包像一块数字垃圾场想批量把照片按IMG_001.jpg改成旅行_2026_001.jpg手动改到崩溃。手动整理费时费力还容易出错而 Python 脚本可以 10 秒搞定 10000 个文件。二、核心思路整个整理流程拆成 3 个独立模块像搭积木一样组合使用功能原理适用场景按类型分类​读取文件扩展名 → 匹配分类字典 → 移入对应子文件夹下载文件夹、桌面杂乱批量重命名​遍历文件 → 按模板生成新名字 → 原子重命名照片归档、项目文件规范化按日期归档​读取文件修改时间 → 创建年/月目录 → 移入照片库、日志文件、截图三、完整代码以下是可直接运行的完整脚本复制到本地.py文件即可使用 Python 自动整理文件工具 功能按文件类型自动分类 批量重命名 按日期归档 清理空文件夹 import os import shutil from datetime import datetime from pathlib import Path from collections import defaultdict # # 1. 文件分类规则可按需要扩展 # CATEGORY_MAP { 图片: [.jpg, .jpeg, .png, .gif, .bmp, .webp, .svg, .ico, .tiff, .psd], 文档: [.pdf, .doc, .docx, .xls, .xlsx, .ppt, .pptx, .txt, .md, .csv], 视频: [.mp4, .avi, .mov, .mkv, .flv, .wmv, .webm], 音频: [.mp3, .wav, .flac, .aac, .ogg, .m4a], 压缩包: [.zip, .rar, .7z, .tar, .gz], 安装包: [.exe, .msi, .dmg, .deb], 代码: [.py, .js, .ts, .java, .c, .cpp, .go, .rs, .html, .css, .json], 字体: [.ttf, .otf, .woff, .woff2], } def get_category(extension: str) - str: ext extension.lower() for category, extensions in CATEGORY_MAP.items(): if ext in extensions: return category return 其他 # # 2. 按文件类型自动分类 # def organize_by_type(folder_path: str, dry_run: bool False) - dict: folder Path(folder_path) if not folder.is_dir(): raise NotADirectoryError(f路径不存在或不是文件夹: {folder_path}) stats defaultdict(int) for item in folder.iterdir(): if item.is_dir() or item.name.startswith(.): continue category get_category(item.suffix) target_dir folder / category stats[category] 1 if dry_run: print(f [预览] {item.name} → {category}/) else: target_dir.mkdir(exist_okTrue) shutil.move(str(item), str(target_dir / item.name)) print(f ✅ {item.name} → {category}/) print(f\n 统计: {dict(stats)}) return dict(stats) # # 3. 批量重命名 # def batch_rename( folder_path: str, pattern: str file_{counter:03d}, prefix: str , add_date: bool False, dry_run: bool False, ): folder Path(folder_path) counter 1 for item in sorted(folder.iterdir()): if item.is_dir() or item.name.startswith(.): continue date_str datetime.now().strftime(%Y%m%d) if add_date else new_name pattern.format(countercounter, nameitem.stem, extitem.suffix) if prefix: new_name f{prefix}_{new_name} if date_str: new_name f{date_str}_{new_name} if not Path(new_name).suffix: new_name item.suffix if dry_run: print(f [预览] {item.name} → {new_name}) else: item.rename(folder / new_name) print(f ✅ {item.name} → {new_name}) counter 1 # # 4. 按日期归档适合照片/截图 # def organize_by_date(folder_path: str, dry_run: bool False): folder Path(folder_path) for item in folder.iterdir(): if item.is_dir() or item.name.startswith(.): continue mtime datetime.fromtimestamp(item.stat().st_mtime) year_dir folder / str(mtime.year) month_dir year_dir / f{mtime.month:02d} if not dry_run: month_dir.mkdir(parentsTrue, exist_okTrue) shutil.move(str(item), str(month_dir / item.name)) print(f {✅ if not dry_run else [预览]} {item.name} → {mtime.year}/{mtime.month:02d}/) # # 5. 清理空文件夹 # def remove_empty_folders(folder_path: str, dry_run: bool False): folder Path(folder_path) removed 0 for root, dirs, files in os.walk(folder, topdownFalse): for d in dirs: full Path(root) / d try: if not any(full.iterdir()): if not dry_run: full.rmdir() removed 1 print(f ️ {将删除 if dry_run else 已删除}: {full}) except (OSError, PermissionError): pass print(f\n共{将 if dry_run else }删除 {removed} 个空文件夹) # # 6. 一键整理入口 # def auto_organize(folder_path: str, dry_run: bool True): print(f\n{*50}\n 目标文件夹: {folder_path}\n{*50}\n) print( [Step 1] 按文件类型分类) organize_by_type(folder_path, dry_rundry_run) print(\n [Step 2] 清理空文件夹) remove_empty_folders(folder_path, dry_rundry_run) if dry_run: print(\n⚠️ 以上为预览模式未做实际修改。确认后设 dry_runFalse。) # # 使用示例 # if __name__ __main__: TARGET_FOLDER rD:\Downloads # ← 改成你的路径 auto_organize(TARGET_FOLDER, dry_runTrue) # 先预览 # auto_organize(TARGET_FOLDER, dry_runFalse) # 确认后执行四、使用指南Step 1修改目标路径# Windows TARGET_FOLDER rD:\Downloads # macOS TARGET_FOLDER /Users/yourname/Desktop # Linux TARGET_FOLDER /home/yourname/DocumentsWindows 路径前面加r避免反斜杠被当成转义符。Step 2先预览再执行脚本默认dry_runTrue只会打印将要做什么不会动你的文件[预览] photo1.jpg → 图片/ [预览] report.pdf → 文档/ [预览] movie.mp4 → 视频/确认无误后把dry_run改为False真正执行。Step 3单独调用某个功能# 只做批量重命名加前缀 日期 batch_rename(TARGET_FOLDER, patternphoto_{counter:03d}, prefix东京旅行, add_dateTrue) # 只按日期归档照片 organize_by_date(TARGET_FOLDER) # 只清理空文件夹 remove_empty_folders(TARGET_FOLDER)五、实用技巧 安全第一建议说明先 dry_run​永远先预览再执行确认分类规则符合预期备份重要文件​首次在重要文件夹上运行时先复制一份排除系统文件​脚本已自动跳过.开头的隐藏文件 自定义分类规则在CATEGORY_MAP字典里添加或修改即可CATEGORY_MAP { 电子书: [.epub, .mobi, .azw3, .pdf], 设计素材: [.psd, .ai, .sketch, .fig, .xd], 虚拟机: [.vmdk, .vdi, .qcow2, .ova], }⏰ 设置定时自动整理结合 Windows 任务计划程序 / macOScron/ Linuxcrontab每周自动跑一次# crontab 示例每周日凌晨 3 点自动整理下载文件夹 0 3 * * 0 /usr/bin/python3 /path/to/organize.py 进阶玩法按文件大小分类大文件单独归档到移动硬盘目录去重用hashlib计算 MD5自动删除重复文件智能识别结合python-magic库不依赖扩展名也能识别文件类型GUI 界面用tkinter或PyQt包一层图形界面给非技术同事用六、总结痛点Python 解法文件夹杂乱无章organize_by_type()按类型自动归位文件名乱七八糟batch_rename()统一命名规范照片越来越多organize_by_date()按年月归档空文件夹残留remove_empty_folders()一键清理核心就一句话用pathlib操作路径用shutil移动文件用字典做分类映射。