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

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 相同就删除
相关推荐
AIFQuant19 分钟前
Python股票实时价格告警系统:WebSocket订阅与REST快照实战
开发语言·python·websocket·a股行情
名字还没想好☜31 分钟前
Java Collectors.groupingBy 进阶:多级分组、下游收集器与统计聚合一次搞定
java·windows·后端·python·spring
2601_962078231 小时前
Python接口自动化流程(pytest)
python·pytest·接口自动化·测试框架·断言
杨女士YRJ1 小时前
python+pytest+01
python·pytest
鸽芷咕2 小时前
Mu Editor 鸿蒙 PC 适配全记录:用 Qt 与嵌入式 CPython 重建教学型 Python IDE
python·qt·harmonyos
微软技术分享2 小时前
基于 HuggingFace Tokenizers 训练自定义分词器
python·ubuntu·大模型·huggingface
gf13211112 小时前
python_调用远程服务器上的openclaw
服务器·python·php
lbb 小魔仙2 小时前
Jupyter Notebook / Lab 深度配置指南:插件 + 内核 + 远程访问 + 容器化部署
ide·python·jupyter
2601_962300472 小时前
python是跨平台的吗
python·开源·跨平台·面向对象·
2401_844582952 小时前
软件架构设计与持续重构:模块化开发实战建
python