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

如何将重复文件清理脚本批量应用到驱动器下的每个一级文件夹?

修改方案:自动遍历一级文件夹独立清理重复文件

修改思路

  • 取消手动选择单个文件夹的交互,改为直接指定目标驱动器根目录
  • 遍历根目录下的所有一级子文件夹,对每个文件夹单独执行去重逻辑
  • 每个一级文件夹维护独立的哈希记录字典,彻底避免跨文件夹的文件被误判为重复

修改后的完整代码

import os
import hashlib
from pathlib import Path
from tkinter import Tk, filedialog

# 隐藏tkinter的GUI窗口
Tk().withdraw()

# 选择驱动器根目录(比如Z:/),也可以直接写死路径:root_dir = "Z:/"
root_dir = filedialog.askdirectory(title="选择目标驱动器根目录")

# 遍历根目录下的所有一级子文件夹
for item in os.listdir(root_dir):
    folder_path = os.path.join(root_dir, item)
    # 只处理一级目录,跳过文件
    if not os.path.isdir(folder_path):
        continue
    
    print(f"开始处理文件夹: {folder_path}")
    # 每个文件夹单独维护自己的唯一文件哈希字典
    unique_files = dict()
    
    # 遍历当前文件夹下的所有文件(包括子目录)
    for root, folders, files in os.walk(folder_path):
        for file in files:
            file_full_path = Path(os.path.join(root, file))
            
            # 仅处理.txt和.bmp格式文件
            if not file.endswith((".txt", ".bmp")):
                continue
            
            try:
                # 计算文件内容的MD5哈希值
                with open(file_full_path, 'rb') as f:
                    hash_file = hashlib.md5(f.read()).hexdigest()
                
                # 哈希不存在则记录,存在则删除重复文件
                if hash_file not in unique_files:
                    unique_files[hash_file] = file_full_path
                else:
                    os.remove(file_full_path)
                    print(f"已删除重复文件: {file_full_path}")
            except Exception as e:
                print(f"处理文件 {file_full_path} 时出错: {str(e)}")

print("所有文件夹处理完成")

关键修改说明

  1. 根目录选择:可以通过对话框选择驱动器根目录,也可以直接写死路径(比如root_dir = "Z:/"),避免手动逐个选择文件夹
  2. 独立哈希字典:每个一级文件夹都重新初始化unique_files字典,确保不同文件夹的哈希记录完全独立,不会跨文件夹去重
  3. 格式前置过滤:提前判断文件格式,避免对非目标格式文件做哈希计算,提升效率
  4. 异常处理:新增异常捕获,避免单个文件处理失败导致整个脚本中断

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 07:15:35