
以下是 “按文件类型自动分类文件夹” 的完整 Python 代码,复制后修改 target_folder 路径即可使用,支持自动创建分类文件夹、异常处理和结果统计。
# 导入必需模块:os用于文件路径操作,shutil用于文件移动
import os
import shutil
def auto_classify_files(target_folder):
# 1. 定义文件类型分类规则:key是文件夹名称,value是对应的文件后缀(可自定义修改)
file_type_map = {
"文档": [".docx", ".doc", ".pdf", ".txt", ".xlsx", ".xls", ".ppt", ".pptx"],
"图片": [".jpg", ".jpeg", ".png", ".gif", ".bmp", ".svg"],
"视频": [".mp4", ".avi", ".mov", ".mkv", ".flv"],
"音频": [".mp3", ".wav", ".flac", ".m4a"],
"压缩包": [".zip", ".rar", ".7z", ".tar", ".gz"],
"代码文件": [".py", ".java", ".cpp", ".js", ".html", ".css"],
"安装包": [".exe", ".dmg", ".pkg", ".msi"]
}
# 2. 遍历分类规则,创建对应的文件夹(不存在则创建)
for folder_name in file_type_map.keys():
folder_path = os.path.join(target_folder, folder_name)
if not os.path.exists(folder_path):
os.makedirs(folder_path)
print(f"已创建文件夹:{folder_name}")
# 3. 统计变量:记录处理结果
processed_count = 0 # 成功处理的文件数
unclassified_files = [] # 未识别类型的文件
# 4. 遍历目标文件夹中的所有文件和子目录
for file_name in os.listdir(target_folder):
# 拼接文件完整路径
file_path = os.path.join(target_folder, file_name)
# 只处理文件,跳过子目录(避免误移动文件夹)
if os.path.isfile(file_path):
# 获取文件后缀(如".jpg"),忽略大小写(统一转为小写匹配)
file_ext = os.path.splitext(file_name)[1].lower()
# 标记是否找到对应分类
classified = False
# 5. 匹配文件类型,移动到对应文件夹
for folder_name, ext_list in file_type_map.items():
if file_ext in ext_list:
# 拼接目标文件夹路径
target_path = os.path.join(target_folder, folder_name, file_name)
# 处理文件重名:若目标路径已存在,在文件名后加"(1)"避免覆盖
if os.path.exists(target_path):
name_without_ext = os.path.splitext(file_name)[0]
target_path = os.path.join(
target_folder, folder_name, f"{name_without_ext}(1){file_ext}"
)
# 移动文件(异常处理:避免文件占用、权限问题导致脚本中断)
try:
shutil.move(file_path, target_path)
processed_count += 1
classified = True
print(f"已移动:{file_name} → {folder_name}文件夹")
except Exception as e:
print(f"移动失败:{file_name},原因:{str(e)}")
# 6. 记录未识别类型的文件
if not classified:
unclassified_files.append(file_name)
# 7. 输出处理结果总结
print("\n" + "="*50)
print(f"处理完成!共处理文件:{processed_count} 个")
if unclassified_files:
print(f"未识别类型的文件:{len(unclassified_files)} 个")
print("具体文件:", ", ".join(unclassified_files))
else:
print("所有文件均已成功分类~")
# -------------------------- 核心执行部分 --------------------------
if __name__ == "__main__":
# 修改为你需要整理的文件夹路径(示例路径:Windows和Mac通用格式)
# Windows示例:target_folder = r"C:\Users\你的用户名\Downloads"
# Mac/Linux示例:target_folder = "/Users/你的用户名/Downloads"
target_folder = r"C:\Users\XXX\Downloads" # 【必须修改此处路径】
# 检查路径是否存在,不存在则提示
if not os.path.exists(target_folder):
print(f"错误:路径不存在 → {target_folder}")
else:
auto_classify_files(target_folder)使用说明
找到代码中
target_folder变量,替换为你要整理的文件夹路径(如下载文件夹、桌面文件夹)。可根据需求修改
file_type_map字典,添加 / 删除分类(如新增 “设计文件” 分类,包含.psd.ai后缀)。运行代码前建议备份重要文件,避免因特殊情况(如文件占用)导致异常。
支持 Windows、Mac、Linux 系统,无需额外安装依赖(使用 Python 内置模块)。
评论区