如何将重复文件清理脚本批量应用到驱动器下的每个一级文件夹?
修改方案:自动遍历一级文件夹独立清理重复文件
修改思路
- 取消手动选择单个文件夹的交互,改为直接指定目标驱动器根目录
- 遍历根目录下的所有一级子文件夹,对每个文件夹单独执行去重逻辑
- 每个一级文件夹维护独立的哈希记录字典,彻底避免跨文件夹的文件被误判为重复
修改后的完整代码
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("所有文件夹处理完成")
关键修改说明
- 根目录选择:可以通过对话框选择驱动器根目录,也可以直接写死路径(比如
root_dir = "Z:/"),避免手动逐个选择文件夹 - 独立哈希字典:每个一级文件夹都重新初始化
unique_files字典,确保不同文件夹的哈希记录完全独立,不会跨文件夹去重 - 格式前置过滤:提前判断文件格式,避免对非目标格式文件做哈希计算,提升效率
- 异常处理:新增异常捕获,避免单个文件处理失败导致整个脚本中断
内容的提问来源于stack exchange,提问作者Paul W
相关产品推荐
相关产品推荐

