用 Python 自动整理文件、重命名、分类电脑文件夹
2026/8/4 18:30:13 网站建设 项目流程

用 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_ok=True) 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(counter=counter, name=item.stem, ext=item.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(parents=True, exist_ok=True) 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, topdown=False): 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_run=dry_run) print("\n🧹 [Step 2] 清理空文件夹") remove_empty_folders(folder_path, dry_run=dry_run) if dry_run: print("\n⚠️ 以上为预览模式,未做实际修改。确认后设 dry_run=False。") # ============================================================ # 使用示例 # ============================================================ if __name__ == "__main__": TARGET_FOLDER = r"D:\Downloads" # ← 改成你的路径 auto_organize(TARGET_FOLDER, dry_run=True) # 先预览 # auto_organize(TARGET_FOLDER, dry_run=False) # 确认后执行

四、使用指南

Step 1:修改目标路径

# Windows TARGET_FOLDER = r"D:\Downloads" # macOS TARGET_FOLDER = "/Users/yourname/Desktop" # Linux TARGET_FOLDER = "/home/yourname/Documents"

💡Windows 路径前面加r,避免反斜杠被当成转义符。

Step 2:先预览,再执行

脚本默认dry_run=True,只会打印"将要做什么",不会动你的文件:

[预览] photo1.jpg → 图片/ [预览] report.pdf → 文档/ [预览] movie.mp4 → 视频/

确认无误后,把dry_run改为False,真正执行。

Step 3:单独调用某个功能

# 只做批量重命名(加前缀 + 日期) batch_rename(TARGET_FOLDER, pattern="photo_{counter:03d}", prefix="东京旅行", add_date=True) # 只按日期归档照片 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 界面:用tkinterPyQt包一层图形界面,给非技术同事用


六、总结

痛点

Python 解法

文件夹杂乱无章

organize_by_type()按类型自动归位

文件名乱七八糟

batch_rename()统一命名规范

照片越来越多

organize_by_date()按年月归档

空文件夹残留

remove_empty_folders()一键清理

核心就一句话:用pathlib操作路径,用shutil移动文件,用字典做分类映射。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询