Python通过图片文件内容的HashCode对比来删除相同图片

本文介绍了一种通过Python比较图片文件内容的HashCode来删除重复图片的方法。首先展示了一个简单的网页预览过程,然后执行删除操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

《深度学习-如何提高数据集质量》

这次是通过图片文件内容的对比来删除相同的图片,为了有一个对比的方式,我先生成了网页,在网页中进行一个浏览,然后再打开删除语句,进行删除。效果如下:
在这里插入图片描述
就是这样网页效果比较粗糙,但能产生需要的效果。浏览完了就可以打开删除语句了。
代码如下:

import os
import hashlib

DirList = [
     '/home/king/PycharmProjects/nsfw_data_scrapper/raw_data/drawings',
    '/home/king/PycharmProjects/nsfw_data_scrapper/raw_data/hentai',
    '/home/king/PycharmProjects/nsfw_data_scrapper/raw_data/neutral',
    '/home/king/PycharmProjects/nsfw_data_scrapper/raw_data/porn',
    '/home/king/PycharmProjects/nsfw_data_scrapper/raw_data/sexy'
]

def getMD5(file, readLen = 1024*20):
    md5code = hashlib.md5()
    with open(file, 'rb') as f:
        data = f.read()

        # *********一定要注意这里下面的写法是错误的**********
        # 带有读取限制的方式是错误的,有的图片头部是相同的,往往有几十K的头,这些头都相同的,
        # 如果想加读取限制,保险的情况就是限制的大小和较小的那个文件相同。
        #data = f.read(readLen)

    md5code.update(data)

    ret = md5code.hexdigest()
    return ret

m = dict()
html_start = '<html>\n'\
    '<style>\n'\
	    'img{\n'\
		    'width: 200px;\n'\
		    'height: auto;\n'\
	    '}\n'\
    '</style>\n\n'\
    '<body>\n\n'

html_end = '</body>\n'\
            '</html>\n'

div_string = '<div>\n'\
		'<img src="%s" />\n'\
		'<img src="%s" />\n'\
	'</div>\n\n'

html = open('/home/king/Desktop/a.html', 'w')
html.write(html_start)

same = 0

for path in DirList:
    for filename in os.listdir(path):
        fullName = os.path.join(path, filename)
        if os.path.isfile(fullName):
            md5 = getMD5(fullName)
            if md5 not in m.keys():
                m[md5] = fullName
            else:
                html.write(div_string % (fullName, m[md5]))
                print(fullName, m[md5])
                # 使用时请打开
                #os.remove(fullName)
                same = same + 1
                # 这里写200个目的就是先通过网页检查一遍,如果没有错误,再打开删除语句。当然了这里只是测试代码。
                if(same > 200):
                    break
print(same)
html.write(html_end)
html.close()

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值