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

如何用Python实现按条件在目录间移动文件并清理子目录

子目录批量处理Python实现方案

前置说明

  • 脚本依赖Python标准库,无需额外安装第三方依赖
  • 运行前请务必备份原始数据,避免误操作造成文件丢失
  • 需提前替换脚本中的3个自定义参数:主目录路径、溢出文件存储路径、保留文件数量

参考目录结构:
目录结构示例

完整可运行脚本

import os
import shutil
from pathlib import Path

# -------------------------- 自定义参数修改区 --------------------------
# 待处理的主目录路径
ROOT_DIR = Path("/替换为你的主目录实际路径")
# 超出10个的文件移动到的目标目录路径
OVERFLOW_DIR = Path("/替换为溢出文件存储的实际路径")
# 每个子目录保留的文件数量
KEEP_COUNT = 10
# ----------------------------------------------------------------------

# 自动创建溢出存储目录(如果不存在)
OVERFLOW_DIR.mkdir(parents=True, exist_ok=True)

# 遍历主目录下的所有一级子目录
for sub_dir in ROOT_DIR.iterdir():
    # 只处理文件夹,跳过主目录下的单个文件
    if not sub_dir.is_dir():
        continue
    
    # 获取当前子目录下的所有文件(排除嵌套子目录)
    all_files = [f for f in sub_dir.iterdir() if f.is_file()]
    file_num = len(all_files)

    # 规则2:文件数量不足10,直接删除整个子目录
    if file_num < KEEP_COUNT:
        shutil.rmtree(sub_dir)
        continue

    # 规则1:文件数量>=10,保留前KEEP_COUNT个,剩余移动到溢出目录
    keep_files = all_files[:KEEP_COUNT]
    move_files = all_files[KEEP_COUNT:]

    for file_to_move in move_files:
        # 处理重名问题:如果溢出目录已有同名文件,添加序号后缀
        target_path = OVERFLOW_DIR / file_to_move.name
        suffix_idx = 1
        while target_path.exists():
            stem = file_to_move.stem
            suffix = file_to_move.suffix
            target_path = OVERFLOW_DIR / f"{stem}_{suffix_idx}{suffix}"
            suffix_idx += 1
        # 执行移动操作
        shutil.move(str(file_to_move), str(target_path))

关键逻辑说明

  • 遍历阶段只处理主目录下的一级子文件夹,不会递归处理更深层的嵌套目录,匹配常规的同级子目录结构
  • 统计文件时自动过滤子目录内的嵌套文件夹,仅统计独立文件,避免计数错误
  • 移动文件时自动处理重名冲突,不会覆盖溢出目录中已有的同名文件

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 00:39:01