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

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 相同就删除
相关推荐
云姜.2 小时前
YAML简单使用
python
喵手2 小时前
Python爬虫实战:手把手教你Python 自动化构建志愿服务岗位结构化数据库!
爬虫·python·自动化·数据采集·爬虫实战·零基础python爬虫教学·志愿服务岗位结构数据库打造
chushiyunen2 小时前
python numpy包的使用
开发语言·python·numpy
小邓睡不饱耶2 小时前
Python多线程爬虫实战:爬取论坛帖子及评论
开发语言·爬虫·python
喵手2 小时前
Python爬虫实战:手把手教你如何采集开源字体仓库目录页(Google Fonts / 其他公开字体目录)!
爬虫·python·自动化·数据采集·爬虫实战·零基础python爬虫教学·开源字体仓库目录页采集
Chase_______3 小时前
【Python 基础】第2章:流程控制完全指南(if/match/while/for)
python
第一程序员3 小时前
Python高级特性详解:从基础到进阶
python·github
wzhidev3 小时前
04、Python核心数据类型详解:从一段诡异的调试说起
开发语言·python
wzhidev3 小时前
05、Python流程控制与函数定义:从调试现场到工程实践
linux·网络·python