基于MD5的文件查重程序

MD5简介

        MD5的全称是Message-Digest Algorithm 5,中文意思是消息摘要算法5。它是计算数据签名的一种密码散列函数。

程序设计流程

    1.读取目录下所有文件

    2.计算文件的MD5值

    3.查找重复MD5值

    4.删除重复MD5值的文件

主要优点:

  • 计算速度快,支持大规模文件查重。

  • 只存储MD5值不泄露原始内容。

  • 可以识别文件内容添加空格、改变格式后是否相同。

缺点

  • MD5本身不再安全,理论上可能存在碰撞。

  • 无法识别部分内容修改后的文件。

程序代码

import hashlib                  #导入哈希算法库
import os                       #导入文件操作功能库
from collections import Counter #导入计数器模块#获取文件MD5哈希值
def Get_MD5_Checksum(File_Path):MD5 = hashlib.md5()         #获取MD5算法对象with open(File_Path, 'rb') as file:for chunk in iter(lambda: file.read(4096), b''):MD5.update(chunk)return MD5.hexdigest()if __name__ == '__main__':checksum = []           #哈希值缓存emptyDict = {}          #所有文件及哈希值Duplicate_File = []     #重复文件file = [f for f in os.listdir() if os.path.isfile(f)]   #查找所有文件for Count_i in range(len(file)):checksum.append(Get_MD5_Checksum(file[Count_i]))    #计算哈希值emptyDict[file[Count_i]] = checksum[Count_i]        #将每个文件名与哈希值匹配Counter_value = Counter(checksum).most_common()         #计算重复哈希值数for Count_j in range(len(Counter_value)):Counter_File = Counter_value[Count_j][1]            #获取单哈希值的重复文件数if int(Counter_File) > 1:                           #对重复文件进行处理print("重复的文件名为:  ",end="")for key, value in emptyDict.items():if Counter_value[Count_j][0] == value:      #字典通过值找键print(key+"  ",end="")Counter_File -= 1if(Counter_File):                       #重复文件只保留一个Duplicate_File.append(key)          #将重复的文件名添加到列表print("")if(Counter_value[0][1] > 1):                #判断是否有重复文件Input = input("是否删除重复文件(Y/N)")if (Input == 'y') | (Input == 'Y'):     #根据用户输入来删除文件print("已删除:",end="")print(Duplicate_File)for Count_k in range(len(Duplicate_File)):  #删除重复文件列表中文件os.remove(Duplicate_File[Count_k])else:print("未找到重复文件")input("按任意键退出")

程序运行效果


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部