mobile wallpaper 1mobile wallpaper 2mobile wallpaper 3mobile wallpaper 4mobile wallpaper 5mobile wallpaper 6mobile wallpaper 7mobile wallpaper 8
689 字
2 分钟
项目|Python文件夹自动整理脚本
2026-05-26

只是博主初学 vibe coding 的低技术力产物而已,被称为“网络泔水”也毫不为过(

不过,我还是假装写一下博客吧,哈哈。


前言#

不知道你有没有遇到过这种情况:

下载文件夹越用越乱,图片、视频、文档、压缩包堆在一起,想找一个文件要翻半天。

在这里分享一个用 Python 写的自动分类文件的脚本。GitHub仓库如下。(不过没什么人会看吧啊喂!)

Luquiescene
/
file-organizer
Waiting for api.github.com...
00K
0K
0K
Waiting...

📁 文件夹自动整理工具#

一个简洁实用的 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"],
# ... 其他分类
}

注意事项#

  1. ⚠️ 建议备份 - 第一次使用建议先备份目标文件夹
  2. ⚠️ 路径检查 - 确保填写的目标文件夹路径存在
  3. ⚠️ 权限检查 - 确保脚本有权限读写目标文件夹
  4. ℹ️ 递归说明 - 本脚本只整理目标文件夹的第一层,不处理子文件夹内部的内容

系统要求#

  • Python 3.6 或更高版本
  • 无需安装额外依赖(使用 Python 标准库)

完整代码展示#

"""
文件夹自动整理脚本
功能:自动将文件夹中的文件按后缀名分类到不同子文件夹
"""
import os
import shutil
from pathlib import Path
from typing import Dict, List
# ============================================================
# 第一步:配置区域(请根据你的实际情况修改下面这些值)
# ============================================================
# 要整理的文件夹路径(请替换成你自己的文件夹路径)
# 注意事项:
# - Windows 用户示例:D:\\Downloads 或 D:/Downloads
# - Mac/Linux 用户示例:/Users/你的用户名/Downloads
TARGET_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/
作者
Luquiescene
发布于
2026-05-26
许可协议
CC BY-NC-SA 4.0

部分信息可能已经过时

目录