首页Python【Python小程序】查找...

【Python小程序】查找并删除重复文件

本系列文章配套代码获取有以下两种途径:

  • 通过百度网盘获取:
链接:https://pan.baidu.com/s/1i9F6oV1J5oZnIsOASDs0gQ?pwd=mnsj 提取码:mnsj
  • 前往GitHub获取
https://github.com/returu/Python_mini_program





01

脚本需求


在指定目录下查找并删除重复文件
02

实现步骤


本次将通过计算每个文件的MD5哈希值来识别重复文件,因为相同内容的文件会有相同的哈希值。
具体实现步骤如下:
  • 使用hashlib模块计算文件的MD5哈希值。
  • 使用os模块遍历指定目录及其所有子目录,对每个文件计算哈希值。
  • 使用一个字典来存储哈希值及其对应的文件路径,以检测重复。
  • 如果发现具有相同哈希值的文件(即重复文件),则将它们记录下来。
  • 在遍历完成后,删除所有记录的重复文件,并打印出已删除的文件路径。

03

代码实现


代码定义了两个函数:
  • file_hash函数用于计算文件的MD5哈希值;
  • find_and_delete_duplicates函数用于在指定目录下查找并删除重复文件。

具体代码如下所示:

# 导入os模块,用于文件和目录操作
import os
# 导入hashlib模块,用于计算哈希值
import hashlib

def file_hash(filepath):
"""计算文件的MD5哈希值"""
# 创建一个md5哈希对象
hash_md5 = hashlib.md5()
# 以二进制读模式打开文件
with open(filepath, "rb") as f:
# 使用iter函数和lambda表达式迭代读取文件,每次读取4096字节,直到文件结束
for chunk in iter(lambda: f.read(4096), b""):
# 更新哈希对象
hash_md5.update(chunk)
# 返回计算得到的哈希值的十六进制字符串表示
return hash_md5.hexdigest()

def find_and_delete_duplicates(root_dir):
"""在指定目录下查找并删除重复文件"""
# 创建一个字典,用于存储文件的哈希值及其对应的文件路径
hashes = {}
# 创建一个列表,用于存储重复文件的路径
duplicates = []

# 使用os.walk遍历指定目录及其所有子目录
for dirpath, _, filenames in os.walk(root_dir):
# 遍历当前目录下的所有文件名
for filename in filenames:
# 构建文件的完整路径
filepath = os.path.join(dirpath, filename)
# 计算当前文件的哈希值
file_hash_value = file_hash(filepath)
# 检查哈希值是否已存在于字典中
if file_hash_value in hashes:
# 如果存在,说明是重复文件,将其路径添加到重复文件列表中
duplicates.append(filepath)
else:
# 如果不存在,将哈希值及其对应的文件路径添加到字典中
hashes[file_hash_value] = filepath

# 遍历重复文件列表,删除每个重复文件
for dup in duplicates:
# 删除文件
os.remove(dup)
# 打印已删除的文件路径
print(f"Deleted duplicate file: {dup}")

# 使用示例
# 指定要查找重复文件的根目录路径
root_directory = "./files" # 替换为你的目录路径
# 调用函数查找并删除重复文件
find_and_delete_duplicates(root_directory)

本篇文章来源于微信公众号: 码农设计师

RELATED ARTICLES

欢迎留下您的宝贵建议

Please enter your comment!
Please enter your name here

- Advertisment -

Most Popular

Recent Comments