查找并删除源目录中与目标目录重复的文件

python 复制代码
import os
import hashlib

def get_file_hash(filepath):
    """计算文件的 MD5 哈希值"""
    with open(filepath, 'rb') as f:
        return hashlib.md5(f.read()).hexdigest()

def find_and_delete_duplicates(source_dir, target_dir):
    """
    查找并删除源目录中与目标目录重复的文件

    参数:
        source_dir: 源目录路径(要清理的目录)
        target_dir: 目标目录路径(参考目录)
    """
    # 修改后:使用相对路径作为 key
    target_files = {}
    for root, dirs, files in os.walk(target_dir):
        for file in files:
            filepath = os.path.join(root, file)
            relpath = os.path.relpath(filepath, target_dir)  # 获取相对路径
            target_files[relpath] = get_file_hash(filepath)

    # 删除时也使用相对路径对比
    for root, dirs, files in os.walk(source_dir):
        for file in files:
            source_path = os.path.join(root, file)
            relpath = os.path.relpath(source_path, source_dir)

            if relpath in target_files:
                if get_file_hash(source_path) == target_files[relpath]:
                    print(f"删除:{source_path}")
                    os.remove(source_path)

使用示例

find_and_delete_duplicates(

r"E:\androidsdk\GCFramework_Game4399\src\main\res",

r"F:\qudaoSDKdoc\4399\operate-3.14.4+574\res"

)

要写出这种脚本,你需要学习以下知识:

📚 基础知识

1. Python 基础语法

  • 变量、数据类型(字符串、列表、字典等)
  • 函数定义和调用
  • 循环(for/while)
  • 条件判断(if/else)
  • 模块导入(import)

2. 文件操作

  • 文件的读写操作(open(), read(), write())
  • 文件路径处理(os.path 模块)
  • 目录遍历(os.walk(), os.listdir())

3. 常用标准库

  • os 模块:文件和目录操作
  • hashlib 模块:计算文件哈希值(MD5, SHA1 等)
  • pathlib 模块(可选):更现代的路径操作

🎯 核心知识点

知识点 用途 示例代码
os.walk() 递归遍历目录树 for root, dirs, files in os.walk(path):
os.path.join() 拼接路径 os.path.join(root, file)
os.path.relpath() 获取相对路径 os.path.relpath(filepath, base_dir)
hashlib.md5() 计算文件 MD5 hashlib.md5(content).hexdigest()
字典(dict) 存储文件映射关系 files_dict[filename] = hash_value

📖 学习路径建议

第 1 阶段:Python 入门(1-2 周)

  • 基础语法
  • 数据类型
  • 函数编写

第 2 阶段:文件操作(1 周)

python 复制代码
# 练习:读取文件
with open('test.txt', 'r') as f:
    content = f.read()

# 练习:遍历目录
import os
for file in os.listdir('.'):
    print(file)

第 3 阶段:实战练习(1-2 周)

从简单到复杂:

  1. 批量重命名文件
  2. 查找重复文件(只比较文件名)
  3. 查找重复文件(比较文件大小)
  4. 查找重复文件(比较文件内容 MD5) ← 当前脚本

💡 推荐学习资源

  • 教程:菜鸟教程 Python3、廖雪峰 Python 教程
  • 练习平台:LeetCode、牛客网
  • 实战项目:GitHub 上搜索 "python file tools"

🔧 快速上手

想尽快写出这种脚本,可以直接:

  1. 学会使用 os.walk() 遍历目录
  2. 学会使用 hashlib 计算文件哈希
  3. 学会用字典存储和对比数据

其实这个脚本的核心逻辑就 3 步:

python 复制代码
1. 遍历目标目录 → 记录每个文件的路径和 MD5
2. 遍历源目录 → 计算每个文件的 MD5
3. 对比 → 如果 MD5 相同就删除
相关推荐
我命由我1234512 小时前
访客系统形式(有用户概念、无用户概念)
java·开发语言·前端·javascript·python·产品运营·产品经理
xixingzhe212 小时前
图表中同比与环比的区别:看趋势还是看变化?
开发语言·python
forest_0913 小时前
当 AI 搜索开始「自我进化」,谁来进化它的核实?——「已核实」结论复核器:3 条结论挖出 2 个洞(附可运行代码)
人工智能·python·机器学习·prompt·agi
小小张说故事13 小时前
Python 的 str 为什么设计成不可变?拆开字符串驻留、字符串池,以及 += 拼接到底慢在哪
后端·python
ljt272496066113 小时前
Python笔记(十一)--Numpy(一)
笔记·python·numpy
时早玖沐13 小时前
KOOK「找不到语音频道」:同一个错误假设,我犯了三次
python·开源·ai编程
_冷眸_13 小时前
Python 调用大模型 API:最小请求、Base URL 和 401/404 排查
开发语言·人工智能·python
Dumbness14 小时前
UIA 读微信群消息没有 id,怎么判断哪条是新的:后缀对齐在翻历史和撤回时整屏重报
python·算法
甜到心里的蛋糕14 小时前
从 QQ 机器人到 B 站 AI 运营:一套可复现的视频流水线踩坑实录
运维·人工智能·python·自动化·视频制作
张驰咨询公司14 小时前
六西格玛Python DOE试验矩阵:3因子2水平生成与验算
python·六西格玛·实验设计·itertools·doe试验矩阵