You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Python中高效移动文件并归类整理无序子文件夹?

Python实现文件按类型归类到新目录

核心思路

遍历源文件夹下所有子目录中的文件,根据文件后缀名(统一小写处理)创建对应分类目录,将文件移动到目标分类目录中,同时处理重复文件名避免覆盖。

完整代码实现

import os
import shutil

def get_unique_filename(directory, filename):
    """生成不重复的目标文件名"""
    base_name, ext = os.path.splitext(filename)
    counter = 1
    while True:
        # 生成带计数器的文件名(仅当重复时添加)
        new_filename = f"{base_name}({counter}){ext}" if counter > 1 else filename
        target_path = os.path.join(directory, new_filename)
        if not os.path.exists(target_path):
            return target_path
        counter += 1

def organize_files(source_dir, target_dir):
    """将源文件夹的文件按类型归类到目标文件夹"""
    # 遍历源文件夹下所有文件(包括子目录)
    for root, _, files in os.walk(source_dir):
        for file in files:
            file_full_path = os.path.join(root, file)
            # 跳过目录(os.walk的files列表已过滤目录,此处做双重保险)
            if not os.path.isfile(file_full_path):
                continue
            
            # 获取文件后缀并转小写
            _, ext = os.path.splitext(file)
            ext = ext.lower()
            
            # 确定分类子目录
            if ext:
                # 去掉后缀前的点,比如将".txt"转为"txt"作为目录名
                category_dir = os.path.join(target_dir, ext[1:])
            else:
                # 无后缀文件统一归类到"无后缀文件"目录
                category_dir = os.path.join(target_dir, "无后缀文件")
            
            # 创建分类目录(已存在则跳过)
            os.makedirs(category_dir, exist_ok=True)
            
            # 生成不重复的目标文件路径
            target_file_path = get_unique_filename(category_dir, file)
            
            # 移动文件,捕获异常避免程序中断
            try:
                shutil.move(file_full_path, target_file_path)
                print(f"成功移动: {file_full_path} → {target_file_path}")
            except Exception as e:
                print(f"移动失败 {file_full_path}: {str(e)}")

# ---------------------- 使用示例 ----------------------
if __name__ == "__main__":
    # 替换为你的源文件夹和目标文件夹路径
    SOURCE_FOLDER = "D:/待整理文件夹"
    TARGET_FOLDER = "D:/已整理文件夹"
    organize_files(SOURCE_FOLDER, TARGET_FOLDER)
    print("文件整理完成!")

关键细节说明

  • 全目录遍历:使用os.walk递归遍历源文件夹下所有子目录,确保没有遗漏任何文件
  • 统一后缀规则:将后缀转为小写,避免.TXT和.txt被归为不同类别
  • 重复文件处理:通过get_unique_filename函数自动生成带计数器的文件名,防止覆盖已存在的文件
  • 健壮性保障:添加try-except捕获移动文件时的异常(如文件被占用、权限不足等),确保程序能继续处理其他文件
  • 灵活分类规则:如果需要自定义分类(如把jpg/png/gif归为"图片"类),可以添加后缀映射字典,示例如下:
    # 自定义分类映射
    EXT_CATEGORY_MAP = {
        ".jpg": "图片",
        ".png": "图片",
        ".gif": "图片",
        ".txt": "文档",
        ".docx": "文档",
        ".xlsx": "表格"
    }
    
    # 在确定分类目录时替换为:
    category_dir = os.path.join(target_dir, EXT_CATEGORY_MAP.get(ext, ext[1:] if ext else "无后缀文件"))
    

内容的提问来源于stack exchange,提问作者LM10

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 15:15:33