MD5简介
MD5 即 Message-Digest Algorithm 5(信息-摘要算法5)。摘要算法又称哈希算法、散列算法。它通过一个函数,把任意长度的数据转换为一个长度固定的数据串(通常用16进制的字符串表示)。MD5 是从MD2、MD3 和 MD4 发展而来的一种加密算法,其主要通过采集文件的信息摘要,以此进行计算并加密。通过MD5算法进行加密,文件就可以获得一个唯一的 MD5 值,这个值是独一无二的,就像我们的指纹一样。如果任何人对文件做了任何改动,其 MD5 值也就是对应的“数字指纹”都会发生变化。
图片去重实例
我们可以计算图片的 md5 值。若几张图片完全相同,则其 md5 值也完全相同,此时可以根据 md5 值是否相同来对图片进行去重处理。
以电脑F盘找中 images 文件夹为例,对其各个子文件夹内的图片进行去重。
Python程序
Python 的 hashlib 提供了常见的摘要算法,如MD5,SHA1等。
import os
from hashlib import md5
def main():
path = 'F:/images'
f = open('F:/images/md5.txt', 'w')
list = []
list1 = []
#得到所有图片的路径,加到列表list1中
root, dirs, files = next(os.walk(path))
for i in range(len(dirs)):
file = os.listdir(path + '/' + dirs[i])
for j in range(len(file)):
line = path + '/' +dirs[i] + '/' + str(file[j])
list1.append(line)
#计算每张图片的md5值,并将图片路径与其md5值整合到列表list中
for n in range(len(list1)):
hash = md5()
img = open(list1[n], 'rb')
hash.update(img.read())
img.close()
list2 = [list1[n], hash.hexdigest()]
f.write(str(list2)+'\n')
list.append(list2)
#两两比较md5值,若相同,则删去一张图片
m = 0
while m < len(list):
t = m + 1
while t < len(list):
if list[m][1] == list[t][1]:
os.remove(list[t][0])
del list[t]
else:
t += 1
m += 1
if __name__ == '__main__':
main()
去重结果
计算的每张图片 md5 值
重复图片已去除
直接对某一文件夹内的图片进行去重
#得到所有图片的路径,加到列表list1中
root, dirs, files = next(os.walk(path))
for i in range(len(dirs)):
file = os.listdir(path + '/' + dirs[i])
for j in range(len(file)):
line = path + '/' +dirs[i] + '/' + str(file[j])
list1.append(line)
将上述代码改为以下代码即可
root, _, files = next(os.walk(path))
for i in range(len(files)):
line = path + '/' + str(files[i])
list1.append(line)
实例展示
对一个文件夹 images11 中的图片去重