Python md5去重图片文件

因为在实习中运用到了用md5对图片进行去重,我发现Python里面直接就有封装好的库hashlib,提供常用的摘要算法,如MD5和SHA1。

摘要算法:又称为哈希算法,散列算法,简单来说就是将一系列原始的数据转化为长度固定的数据串,通常以16进制表示,从而来进行进一步的比对。例如:有一张图片1.jpg,并附上它的摘要为‘1234abcd90ad123458dfaecb12345678’,当有人又上传了一张图片2.jpg,如果这两张图片不同,那么它的摘要就会不同。

摘要算法就是通过预先设定好的函数将输入数据转化为固定长度的摘要,从而判定源数据是否被修改。

特点:(1)完全相同的一段数据,尽管命名不同,不论时间地点(加密算法相同的条件)加密出的32位的字符串完全相同。

(2)但不同的数据可能会得到相同的摘要,称为碰撞,因为是在有限的集合里映射;

(3)逆向解密过程很难,散列能力强,安全。

Example:

通过一小段Python代码来举例说明:

输入的图片文件如下:

其中包含了许多重复的文件。

代码:

import os
import hashlib

def get_md5(file):
    file = open(file,'rb')
    md5 = hashlib.md5(file.read())
    file.close()
    md5_values = md5.hexdigest()
    return md5_values

file_path = "C:\\wanjingyi\\files"
os.chdir(file_path)
file_list = os.listdir(file_path)
md5_list =[]
for file in file_list:
    md5 = get_md5(file)
    if md5 not in md5_list:
        md5_list.append(md5)
    else:
        os.remove(file)

执行程序后的结果:

可见,重复的图片已经被去掉了,这里用的是SHA1。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值