千家信息网

如何用python删除文件夹中的重复图片

发表于:2025-11-15 作者:千家信息网编辑
千家信息网最后更新 2025年11月15日,这篇文章主要介绍"如何用python删除文件夹中的重复图片",在日常操作中,相信很多人在如何用python删除文件夹中的重复图片问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家
千家信息网最后更新 2025年11月15日如何用python删除文件夹中的重复图片

这篇文章主要介绍"如何用python删除文件夹中的重复图片",在日常操作中,相信很多人在如何用python删除文件夹中的重复图片问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"如何用python删除文件夹中的重复图片"的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

第一部分:判断两张图片是否相同

要查找重复的图片,必然绕不开判断两张图片是否相同。判断两张图片简单呀!图片可以看成数组,比较两个数组是否相等不就行了。但是这样做太过简单粗暴,因为两个数组的每个元素都要一一比较,效率很低。为了尽量避免两个庞大的数组比较:

  • 先进行两张图片的大小(byte)比较,若大小不相同,则两张图片不相同;

  • 在两张图片的大小相同的前提下,进行两张图片的尺寸(长和宽)比较,若尺寸不相同,则两张不相同;

  • 在两张图片的尺寸相同的前提下,进行两张图片的内容(即数组元素)比较,若内容不相同,则图片不相同;

这样,当图片大小或图片尺寸不相同的时候,便认为两张图片不同,可以省去比较数组元素的部分,效率up~

import shutilimport numpy as npfrom PIL import Imageimport osdef 比较图片大小(dir_image1, dir_image2):    with open(dir_image1, "rb") as f1:        size1 = len(f1.read())    with open(dir_image2, "rb") as f2:        size2 = len(f2.read())    if(size1 == size2):        result = "大小相同"    else:        result = "大小不同"    return resultdef 比较图片尺寸(dir_image1, dir_image2):    image1 = Image.open(dir_image1)    image2 = Image.open(dir_image2)    if(image1.size == image2.size):        result = "尺寸相同"    else:        result = "尺寸不同"    return resultdef 比较图片内容(dir_image1, dir_image2):    image1 = np.array(Image.open(dir_image1))    image2 = np.array(Image.open(dir_image2))    if(np.array_equal(image1, image2)):        result = "内容相同"    else:        result = "内容不同"    return resultdef 比较两张图片是否相同(dir_image1, dir_image2):    # 比较两张图片是否相同    # 第一步:比较大小是否相同    # 第二步:比较长和宽是否相同    # 第三步:比较每个像素是否相同    # 如果前一步不相同,则两张图片必不相同    result = "两张图不同"    大小 = 比较图片大小(dir_image1, dir_image2)    if(大小 == "大小相同"):        尺寸 = 比较图片尺寸(dir_image1, dir_image2)        if(尺寸 == "尺寸相同"):            内容 = 比较图片内容(dir_image1, dir_image2)            if(内容 == "内容相同"):                result = "两张图相同"    return result

第二部分:判断文件夹内是否有重复图片

若要判断文件夹内是否有和图片A相同的图片,则需要遍历文件夹内所有图片,挨个判断两个图片是否相同。若文件夹有1000张图片,那么第1张图片需要与剩下的999张图片作比较,第2张图片需要与剩下的998张图片作比较,第3张需要与剩下的997张图片作比较,以此类推。在此程序中的做法是,先对所有图片按图片大小(byte)排序,然后再执行遍历比较。这样做的结果是:重复图片很大概率会连着出现(因为重复图片大小相同)

if __name__ == '__main__':    load_path = 'E:\测试图片集(未去重)'  # 要去重的文件夹    save_path = 'E:\测试图片集(重复照片)'  # 空文件夹,用于存储检测到的重复的照片    os.makedirs(save_path, exist_ok=True)    # 获取图片列表 file_map,字典{文件路径filename : 文件大小image_size}    file_map = {}    image_size = 0    # 遍历filePath下的文件、文件夹(包括子目录)    for parent, dirnames, filenames in os.walk(load_path):        # for dirname in dirnames:        # print('parent is %s, dirname is %s' % (parent, dirname))        for filename in filenames:            # print('parent is %s, filename is %s' % (parent, filename))            # print('the full name of the file is %s' % os.path.join(parent, filename))            image_size = os.path.getsize(os.path.join(parent, filename))            file_map.setdefault(os.path.join(parent, filename), image_size)    # 获取的图片列表按 文件大小image_size 排序    file_map = sorted(file_map.items(), key=lambda d: d[1], reverse=False)    file_list = []    for filename, image_size in file_map:        file_list.append(filename)    # 取出重复的图片    file_repeat = []    for currIndex, filename in enumerate(file_list):        dir_image1 = file_list[currIndex]        dir_image2 = file_list[currIndex + 1]        result = 比较两张图片是否相同(dir_image1, dir_image2)        if(result == "两张图相同"):            file_repeat.append(file_list[currIndex + 1])            print("相同的图片:", file_list[currIndex], file_list[currIndex + 1])        else:            print('不同的图片:', file_list[currIndex], file_list[currIndex + 1])        currIndex += 1        if currIndex >= len(file_list)-1:            break    # 将重复的图片移动到新的文件夹,实现对原文件夹降重    for image in file_repeat:        shutil.move(image, save_path)        print("正在移除重复照片:", image)

第三部分:程序运行结果

若文件夹下有10张图片A、5张图片B、1张图片C,程序运行结束后,该文件夹下剩余1张图片A、1张图片B、1张图片C;其他的图片移动到 save_path 指定的文件夹下。

第四部分:注意

程序代码可以直接复制使用,需要修改 load_path 和 save_path 参数;

保证 load_path 文件夹都为图片格式(.jpg .png .jpeg)的文件类型,不可以有其他格式的文件(例如.mp4);请先用资源管理器处理文件夹,大佬直接修改代码读取文件夹下指定类型的文件;

    到此,关于"如何用python删除文件夹中的重复图片"的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注网站,小编会继续努力为大家带来更多实用的文章!

    图片 相同 文件 文件夹 大小 尺寸 内容 不同 数组 两个 程序 学习 元素 照片 部分 代码 前提 图片内容 图片集 效率 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 北京市安卓软件开发工程师招聘 软件开发实习收获 关于校园网络安全的征文 软件开发一般要多少人 直播软件开发平台app 电脑自动关机软件开发 如何给饥荒服务器添加管理员 软件开发工程师的周志 服务器连接的数据库没有写的权限 手抄网络安全图 优秀毕业论文 软件开发 服务器管理芯片 怎么看数据库主从复制有多快 网络安全密匙在哪里查看 地震数据库技术 数据库数字文本排序 达梦数据库对象处于无效状态 无锡城市职业技术学院网络安全 芝罘区微信小程序软件开发公司 pg数据库时间相减取秒 郴州app软件开发工资多少 珙县网络技术有限公司 北京放射卫生监测数据库 上海工业软件开发多少钱 个体户软件开发营业范围 智能锁网络安全案例 ie服务器错误是为什么 锐龙cpu做软件开发 目前的主流数据库的编写语言 抖因网络技术有限公司
    0