图片来源:《星空列车与白的旅行》CG及二创
689 字
2 分钟
项目|Python文件夹自动整理脚本
只是博主初学 vibe coding 的低技术力产物而已,被称为“网络泔水”也毫不为过(
不过,我还是假装写一下博客吧,哈哈。
前言
不知道你有没有遇到过这种情况:
下载文件夹越用越乱,图片、视频、文档、压缩包堆在一起,想找一个文件要翻半天。
在这里分享一个用 Python 写的自动分类文件的脚本。GitHub仓库如下。(不过没什么人会看吧啊喂!)
Waiting for api.github.com...
📁 文件夹自动整理工具
一个简洁实用的 Python 脚本,用于自动将文件夹中的文件和子文件夹按类型分类整理。
功能特点
- ✅ 自动分类 - 根据文件后缀名自动识别并移动文件
- ✅ 处理子文件夹 - 将散乱的子文件夹集中整理
- ✅ 自动创建 - 分类文件夹不存在时自动创建
- ✅ 防重复 - 遇到同名文件自动添加序号避免覆盖
- ✅ 详细统计 - 整理完成后显示清晰的分类报告
分类规则
| 分类文件夹 | 包含的文件类型 |
|---|---|
| 📁 文件夹 | 目标目录下的所有子文件夹 |
| 🖼️ 图片素材 | .jpg, .jpeg, .png, .gif, .bmp, .webp, .svg, .ico, .tiff |
| 🎬 视频素材 | .mp4, .mov, .avi, .mkv, .wmv, .flv, .webm, .m4v |
| 🎵 音频素材 | .mp3, .wav, .flac, .aac, .ogg, .wma, .m4a |
| 📄 文档 | .doc, .docx, .pdf, .txt, .rtf, .odt, .xlsx, .xls, .pptx, .ppt |
| 📦 压缩文件 | .zip, .rar, .7z, .tar, .gz, .bz2 |
| 💻 代码文件 | .py, .js, .html, .css, .java, .cpp, .c, .go, .rs, .php |
| ⚙️ 安装包 | .exe, .dmg, .pkg, .deb, .rpm, .msi |
| 📂 其他 | 所有不属于以上分类的文件(包括无后缀名文件) |
使用方法
第一步:修改目标文件夹路径
用文本编辑器打开 file_organizer.py,找到以下代码:
TARGET_FOLDER = "/tmp/test_folder" # <-- 这里改成你要整理的文件夹路径!将 /tmp/test_folder 替换为你要整理的文件夹路径:
# Windows 用户示例TARGET_FOLDER = "D:/Downloads"TARGET_FOLDER = "D:\\Downloads"
# Mac 用户示例TARGET_FOLDER = "/Users/你的用户名/Downloads"
# Linux 用户示例TARGET_FOLDER = "/home/你的用户名/Downloads"第二步:运行脚本
在终端中运行:
python file_organizer.py第三步:查看结果
脚本运行后会显示整理报告,例如:
🚀 文件夹自动整理工具==================================================📂 目标文件夹:/Users/张三/Downloads================================================== ✅ 照片.jpg -> 图片素材/ ✅ 视频.mp4 -> 视频素材/ 📁 我的小说 -> 文件夹/ 📄 未知文件.xyz -> 其他/
📊 整理完成!结果统计如下:==================================================
📈 总计整理:4 个项目
📁 移入【文件夹】分类:1 个 - 我的小说
✅ 移入各类素材分类:2 个(图片/视频/音频/文档等) - 照片.jpg - 视频.mp4
📄 移入【其他】分类:1 个 - 未知文件.xyz
==================================================自定义分类
如果你需要添加其他文件类型,可以修改 FILE_CATEGORIES 字典:
FILE_CATEGORIES: Dict[str, List[str]] = { "你的分类名": [".后缀1", ".后缀2", ".后缀3"], # ... 其他分类}注意事项
- ⚠️ 建议备份 - 第一次使用建议先备份目标文件夹
- ⚠️ 路径检查 - 确保填写的目标文件夹路径存在
- ⚠️ 权限检查 - 确保脚本有权限读写目标文件夹
- ℹ️ 递归说明 - 本脚本只整理目标文件夹的第一层,不处理子文件夹内部的内容
系统要求
- Python 3.6 或更高版本
- 无需安装额外依赖(使用 Python 标准库)
完整代码展示
"""文件夹自动整理脚本功能:自动将文件夹中的文件按后缀名分类到不同子文件夹"""
import osimport shutilfrom pathlib import Pathfrom typing import Dict, List
# ============================================================# 第一步:配置区域(请根据你的实际情况修改下面这些值)# ============================================================
# 要整理的文件夹路径(请替换成你自己的文件夹路径)# 注意事项:# - Windows 用户示例:D:\\Downloads 或 D:/Downloads# - Mac/Linux 用户示例:/Users/你的用户名/DownloadsTARGET_FOLDER = "/tmp/test_folder" # <-- 这里改成你要整理的文件夹路径!
# ============================================================# 第二步:定义文件分类规则(后缀名 -> 文件夹名称)# ============================================================
FILE_CATEGORIES: Dict[str, List[str]] = { # 图片素材:常见图片格式 "【图片素材】": [".jpg", ".jpeg", ".png", ".gif", ".bmp", ".webp", ".svg", ".ico", ".tiff"],
# 视频素材:常见视频格式 "【视频素材】": [".mp4", ".mov", ".avi", ".mkv", ".wmv", ".flv", ".webm", ".m4v"],
# 音频素材:常见音频格式 "【音频素材】": [".mp3", ".wav", ".flac", ".aac", ".ogg", ".wma", ".m4a"],
# 文档:常见文档格式 "【文档】": [".doc", ".docx", ".pdf", ".txt", ".rtf", ".odt", ".xlsx", ".xls", ".pptx", ".ppt"],
# 压缩文件:常见压缩格式 "【压缩文件】": [".zip", ".rar", ".7z", ".tar", ".gz", ".bz2"],
# 代码文件:常见代码格式 "【代码文件】": [".py", ".js", ".html", ".css", ".java", ".cpp", ".c", ".go", ".rs", ".php"],
# 安装包:常见安装包格式 "【安装包】": [".exe", ".dmg", ".pkg", ".deb", ".rpm", ".msi"],}
# ============================================================# 第三步:核心整理函数(一般不需要修改)# ============================================================
def get_file_category(file_extension: str) -> str | None: """ 根据文件后缀名获取对应的分类文件夹名称
参数: file_extension: 文件后缀名(如 ".jpg")
返回: 分类文件夹名称,如果不在规则中则返回 None """ # 统一转为小写进行匹配 ext_lower = file_extension.lower()
for category, extensions in FILE_CATEGORIES.items(): if ext_lower in extensions: return category
return None # 未分类的文件
def create_category_folder(base_path: Path, category_name: str) -> Path: """ 创建分类文件夹(如果不存在)
参数: base_path: 目标文件夹路径 category_name: 分类文件夹名称
返回: 创建好的文件夹路径 """ category_path = base_path / category_name category_path.mkdir(exist_ok=True) # exist_ok=True 表示如果已存在不报错 return category_path
def organize_files(target_folder: str) -> Dict[str, List[str]]: """ 整理文件夹中的所有文件
参数: target_folder: 要整理的文件夹路径
返回: 整理结果统计(每个分类移动了哪些文件) """ target_path = Path(target_folder)
# 检查目标文件夹是否存在 if not target_path.exists(): raise FileNotFoundError(f"目标文件夹不存在:{target_folder}")
if not target_path.is_dir(): raise NotADirectoryError(f"路径不是文件夹:{target_folder}")
# 统计结果 results: Dict[str, List[str]] = { "文件夹": [], # 子文件夹 "其他": [], # 未分类的文件 "已分类": [], # 成功分类的文件(图片、视频、文档等) }
# 首先创建所有需要的分类文件夹(确保它们存在) for category in FILE_CATEGORIES.keys(): create_category_folder(target_path, category) # 创建"文件夹"和"其他"分类 create_category_folder(target_path, "文件夹") create_category_folder(target_path, "其他")
# 遍历目标文件夹中的所有文件和子文件夹 for item in target_path.iterdir(): # 跳过本身就是分类文件夹的项(避免把自己移动到自己的子目录) if item.name in FILE_CATEGORIES.keys() or item.name in ["文件夹", "其他"]: continue
if item.is_dir(): # ----------------------------- # 处理子文件夹:移动到"文件夹"分类 # ----------------------------- folder_dest = target_path / "文件夹" / item.name
# 如果目标路径已存在,添加序号区分 if folder_dest.exists(): counter = 1 while folder_dest.exists(): new_name = f"{item.name}_{counter}" folder_dest = target_path / "文件夹" / new_name counter += 1
# 移动文件夹 shutil.move(str(item), str(folder_dest)) results["文件夹"].append(item.name) print(f" 📁 {item.name} -> 文件夹/")
elif item.is_file(): # ----------------------------- # 处理文件:根据后缀名分类 # ----------------------------- file_extension = item.suffix
if file_extension: # 有后缀名的文件,尝试匹配分类 category = get_file_category(file_extension)
if category: # 属于已知分类(如图片、视频、文档等) category_path = target_path / category dest_path = category_path / item.name
# 如果目标路径已存在,添加序号区分 if dest_path.exists(): counter = 1 while dest_path.exists(): new_name = f"{item.stem}_{counter}{item.suffix}" dest_path = category_path / new_name counter += 1
# 移动文件 shutil.move(str(item), str(dest_path)) results["已分类"].append(item.name) print(f" ✅ {item.name} -> {category}/") else: # 未匹配到任何分类,移动到"其他" other_path = target_path / "其他" dest_path = other_path / item.name
if dest_path.exists(): counter = 1 while dest_path.exists(): new_name = f"{item.stem}_{counter}{item.suffix}" dest_path = other_path / new_name counter += 1
shutil.move(str(item), str(dest_path)) results["其他"].append(item.name) print(f" 📄 {item.name} -> 其他/") else: # 没有后缀名的文件,移动到"其他" other_path = target_path / "其他" dest_path = other_path / item.name
if dest_path.exists(): counter = 1 while dest_path.exists(): new_name = f"{item.name}_{counter}" dest_path = other_path / new_name counter += 1
shutil.move(str(item), str(dest_path)) results["其他"].append(item.name) print(f" 📄 {item.name} -> 其他/")
return results
def print_summary(results: Dict[str, List[str]]): """ 打印整理结果摘要 """ print("\n" + "=" * 50) print("📊 整理完成!结果统计如下:") print("=" * 50)
total = len(results["文件夹"]) + len(results["已分类"]) + len(results["其他"]) print(f"\n📈 总计整理:{total} 个项目")
# 显示各个分类的统计 if results["文件夹"]: print(f"\n📁 移入【文件夹】分类:{len(results['文件夹'])} 个") for name in results["文件夹"][:5]: # 最多显示5个 print(f" - {name}") if len(results["文件夹"]) > 5: print(f" ... 还有 {len(results['文件夹']) - 5} 个")
if results["已分类"]: print(f"\n✅ 移入各类素材分类:{len(results['已分类'])} 个(图片/视频/音频/文档等)") for name in results["已分类"][:5]: print(f" - {name}") if len(results["已分类"]) > 5: print(f" ... 还有 {len(results['已分类']) - 5} 个")
if results["其他"]: print(f"\n📄 移入【其他】分类:{len(results['其他'])} 个") for name in results["其他"][:5]: print(f" - {name}") if len(results["其他"]) > 5: print(f" ... 还有 {len(results['其他']) - 5} 个")
print("\n" + "=" * 50)
# ============================================================# 第四步:程序入口# ============================================================
if __name__ == "__main__": print("🚀 文件夹自动整理工具") print("=" * 50) print(f"📂 目标文件夹:{TARGET_FOLDER}") print("=" * 50)
try: # 执行整理 results = organize_files(TARGET_FOLDER)
# 打印结果 print_summary(results)
except FileNotFoundError as e: print(f"\n❌ 错误:{e}") print("\n请检查以下几点:") print("1. 目标文件夹路径是否正确?") print("2. 路径中的文件夹名称是否拼写正确?")
except PermissionError: print("\n❌ 错误:没有访问该文件夹的权限")
except Exception as e: print(f"\n❌ 发生未知错误:{e}") 分享
如果这篇文章对你有帮助,欢迎分享给更多人!
项目|Python文件夹自动整理脚本
https://luq-blog.xyz/posts/2026-05-26-file-organizer/ 部分信息可能已经过时
相关文章 智能推荐
1
笔记|(搁置中)VibeCoding学习笔记
理工研习 关于 vibe coding 的工具及提示词整理。
2
笔记|数据分析学习笔记02|Jupyter在VSCode中的使用
理工研习 本节介绍如何在 VS Code 中安装和使用 Jupyter,包括扩展安装、创建文件和基本操作。
3
笔记|数据分析学习笔记01|开发环境的配置
理工研习 进行 Python 数据分析之前,需要先搭建好开发环境。本节将介绍 Anaconda 的安装与 Jupyter Notebook 的基本使用方法。
4
合集|(更新中)数据分析学习笔记|系列总目录
理工研习 本文章面向数据分析初学者,通过循序渐进的方式,帮助读者掌握 Python 数据分析的核心技能。
5
笔记|Markdown Tutorial
理工研习 Markdown教程。原作者:emn178。原文采用Unlicense协议。









