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

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 相同就删除
相关推荐
北斗落凡尘3 小时前
LangGraph 入门实战(2)
python·langchain
ttod_qzstudio4 小时前
Java 常用语法极简通关(五):类与对象——字段、方法、构造器、this 与 static
java·开发语言·python
jufeng13075 小时前
【系列:手搓自主 AI Agent:Hermes 架构原理剖析 · 第 1 篇】
人工智能·python·架构·agent
月光船幽幽6 小时前
影子模式下保护 logits 不被修改
人工智能·python·算法
_oP_i8 小时前
python 后缀 mjs文件
开发语言·python
北斗落凡尘8 小时前
如何使用LangGraph(1)
python·langchain
Livia要学习9 小时前
Python装饰器
开发语言·python
大模型丫丫10 小时前
LangChain4j:Java 生态的 AI 应用开发利器
java·人工智能·python
circuitsosk10 小时前
向量数据库选型与性能压测:Milvus、Pinecone、Chroma在真实业务下的对比
数据库·python·pinecone·milvus·向量数据库·chroma
雾时之林11 小时前
python--字符串
开发语言·python