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

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 相同就删除
相关推荐
AI机器学习算法16 小时前
机器学习基础知识
数据结构·人工智能·python·深度学习·算法·机器学习·ai学习路线
2301_8092047018 小时前
bootstrap怎么实现鼠标悬停切换图片预览功能
jvm·数据库·python
小徐学编程-zZ1 天前
量产测试数据
python·压力测试·数据库架构
QQ8057806511 天前
django基于机器学习的电商评论情感分析系统设计实现
python·机器学习·django
wx09091 天前
stata实现机器学习的环境配置
python·机器学习·stata
nuowenyadelunwen1 天前
CS 61A Lab 2 笔记:短路求值、高阶函数与 Lambda 表达式
python·函数式编程·cs61a·berkeley
qq_422828621 天前
android图形学之SurfaceControl和Surface的关系 五
android·开发语言·python
weixin_444012931 天前
c++如何将std--vector直接DUMP到二进制文件_指针地址直写【附代码】
jvm·数据库·python
woxihuan1234561 天前
Go语言中--=运算符详解:位右移赋值操作的原理与应用
jvm·数据库·python
石山代码1 天前
Python 数据分析三大库:NumPy + Pandas + Matplotlib
python·数据分析·numpy