page contents
侧边栏壁纸
博主头像
seabell-贝海运维站-分享技术干货与行业动态

残雪凝辉冷画屏,落梅横笛已三更,更无人处月胧明

  • 累计撰写 27 篇文章
  • 累计创建 5 个标签
  • 累计收到 0 条评论

目 录CONTENT

文章目录

Python自动分类文件完整可运行代码(带详细注释)

seabell
2025-11-17 / 0 评论 / 0 点赞 / 25 阅读 / 0 字

以下是 “按文件类型自动分类文件夹” 的完整 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)

使用说明

  1. 找到代码中 target_folder 变量,替换为你要整理的文件夹路径(如下载文件夹、桌面文件夹)。

  2. 可根据需求修改 file_type_map 字典,添加 / 删除分类(如新增 “设计文件” 分类,包含 .psd .ai 后缀)。

  3. 运行代码前建议备份重要文件,避免因特殊情况(如文件占用)导致异常。

  4. 支持 Windows、Mac、Linux 系统,无需额外安装依赖(使用 Python 内置模块)。

0

评论区