基于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("按任意键退出")
程序运行效果

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