图片来源:《星空列车与白的旅行》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
笔记|天文数据科学03|机器学习甄别系外行星
理工研习 本文介绍如何用 Pandas DataFrame 组织系外行星候选体数据,并通过随机森林分类器自动甄别真实行星与假阳性信号,实现从手动识别到机器学习自动分类的跨越。
3
笔记|天文数据科学02|周期侦探
理工研习 本文介绍系外行星探测的量化方法——通过残差平方和比较模型、利用BLS算法自动搜索周期性凌星信号,并使用真实的Kepler太空望远镜数据进行实战分析。
4
笔记|数据分析学习笔记14|Series的创建、属性与索引
理工研习 本节介绍 Pandas Series 的结构、创建方法、常用属性以及索引访问方式,掌握 Series 的核心使用方法。
5
笔记|数据分析学习笔记05|ndarray的数据类型
理工研习 学习NumPy中ndarray支持的数据类型,包括布尔、整数、浮点数和复数类型。
.webp)
.webp)
.webp)
.webp)
.webp)
.webp)
.webp)
.webp)
.webp)
.webp)
.webp)
.webp)
.webp)
.webp)
.webp)
.webp)
.webp)
.webp)
.webp)
.webp)
.webp)
.webp)
.webp)
.webp)
.webp)
.webp)
.webp)
.webp)
.webp)
.webp)
.webp)