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 周)
从简单到复杂:
- 批量重命名文件
- 查找重复文件(只比较文件名)
- 查找重复文件(比较文件大小)
- 查找重复文件(比较文件内容 MD5) ← 当前脚本
💡 推荐学习资源
- 教程:菜鸟教程 Python3、廖雪峰 Python 教程
- 练习平台:LeetCode、牛客网
- 实战项目:GitHub 上搜索 "python file tools"
🔧 快速上手
想尽快写出这种脚本,可以直接:
- 学会使用
os.walk()遍历目录 - 学会使用
hashlib计算文件哈希 - 学会用字典存储和对比数据
其实这个脚本的核心逻辑就 3 步:
python
1. 遍历目标目录 → 记录每个文件的路径和 MD5
2. 遍历源目录 → 计算每个文件的 MD5
3. 对比 → 如果 MD5 相同就删除