Python3查找含重复文件的文件夹并删除冗余 保留文件最多的目录
文件夹维度去重逻辑实现方案
前置准备:构建文件夹维度的特征数据集
你目前已经有了全量文件的哈希-路径映射,首先反过来推导每个文件夹包含的所有文件哈希集合:
- 遍历所有
file_key(即文件哈希),遍历每个哈希对应的path列表 - 对每个文件的完整路径,提取其父文件夹路径(可通过
os.path.dirname(file_path)实现) - 维护一个全局字典
dir_hash_map,key为文件夹路径,value为该文件夹下所有文件的哈希集合 - 可选优化:如果需要支持嵌套文件夹维度的去重,可递归向上汇总父级文件夹的哈希集合(即父文件夹的哈希集合为所有子文件夹哈希集合的并集)
- 该阶段可直接过滤黑名单路径,标记白名单路径为强制保留路径,不进入后续删除候选池
核心判断逻辑实现
步骤1:候选文件夹排序
将所有待判断的候选文件夹,按「文件夹内文件数量」降序排序,文件数量相同的按路径字典序排序即可,优先保留文件更多的文件夹。
步骤2:冗余文件夹判定
遍历排序后的候选文件夹,对每个未被标记为待删除/保留的文件夹,执行以下逻辑:
- 拿当前文件夹的哈希集合
current_set,和后续所有未被标记的文件夹的哈希集合target_set比对:- 如果
target_set.issubset(current_set)且len(target_set) < len(current_set):target_set对应的文件夹是当前文件夹的真子集,标记为待删除 - 如果
target_set == current_set:两个文件夹内容完全一致,属于特殊场景1,加入警告列表,不自动标记删除 - 如果
current_set.intersection(target_set)非空,且互相都不是对方的子集:属于特殊场景2,两个文件夹各有独有文件,加入警告列表
- 如果
- 已经被标记为待删除的文件夹,无需再参与后续的比对逻辑,减少不必要的计算
优化建议
- 可提前为每个文件夹生成总特征值:将文件夹内所有文件哈希排序后拼接,再计算一次哈希作为文件夹的唯一特征,内容完全一致的文件夹特征值完全相同,判断相等时直接比对特征值即可,无需每次比对集合,性能提升明显
- 可按文件数量对文件夹分组,仅相同文件数量的文件夹需要判断是否完全相等,仅文件数量更小的文件夹才可能是大文件夹的子集,可减少90%以上的无效比对
结果输出
- 待删除文件夹列表:直接生成可执行的删除脚本(shell/bat/Python脚本均可),可在脚本中增加二次确认逻辑,避免误删
- 警告列表:按组输出需要人工核验的文件夹,每组标注每个文件夹的路径、文件数量、独有文件数量(即两个集合差集的长度),降低用户核验成本
内容的提问来源于stack exchange,提问作者Teatree
相关产品推荐
相关产品推荐

