如何用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
相关产品推荐
相关产品推荐


