python删除文件夹下相同文件和无法打开的图片

下面是针对“python删除文件夹下相同文件和无法打开的图片”的完整攻略:

1. 安装依赖

首先,需要通过pip安装Pillow以及imagehash这两个库来帮助我们实现相同图片的比对和识别。安装指令如下:

pip install Pillow
pip install imagehash

2. 检测相同图片

我们可以使用imagehash库中的average_hash()函数进行图片比对。将输入图片转换成hash值,然后比对即可。

具体步骤如下:

from PIL import Image
import imagehash
import os

def get_hash(file_path):
    with open(file_path, 'rb') as f:
        img = Image.open(f)
        return str(imagehash.average_hash(img))

# 输入文件夹路径
input_dir = "path/to/input/dir"

# 存储hash值的字典
hash_dict = dict()

# 遍历所有文件
for file_name in os.listdir(input_dir):
    file_path = os.path.join(input_dir, file_name)
    if os.path.isfile(file_path):  # 如果是文件,而非文件夹
        try:
            # 获取hash值,并存入字典中
            file_hash = get_hash(file_path)
            hash_dict.setdefault(file_hash, [])
            hash_dict[file_hash].append(file_path)
        except:
            # 如果出现无法打开的图片,则跳过
            print("Error occurs when opening image: {}".format(file_path))

# 输出hash值相同的所有文件
for file_hash, file_list in hash_dict.items():
    if len(file_list) > 1:  # 如果存在多个文件hash值相同
        print("Hash: {}, {}".format(file_hash, file_list))

代码中,我们首先定义了一个get_hash()函数,用于获取单个图片的hash值。然后,我们遍历输入文件夹下的所有文件,在遍历的过程中,如果是文件而非文件夹,则获取其hash值,并存入字典中。

最后,我们输出hash值相同的所有文件。如果存在多个文件的hash值相同,则说明它们是相同的图片。

3. 删除相同图片

如果我们想要删除相同的图片,我们需要在代码步骤2的基础上进行些许调整。具体地,在输出hash值相同的所有文件时,除了输出文件路径,我们还需要将其中的一个文件删掉。代码按以下方式调整:

...
# 输出hash值相同的所有文件
for file_hash, file_list in hash_dict.items():
    if len(file_list) > 1:  # 如果存在多个文件hash值相同
        print("Hash: {}, {}".format(file_hash, file_list))

        # 删除某个相同图片
        os.remove(file_list[0])
...

删掉哪个图片可以自由选择一个即可。

4. 示例说明

下面提供两个示例说明:

示例1:检测相同图片

以以下文件夹为例:

input_dir/
  |- cat1.jpg
  |- cat2.jpg
  |- dog.jpg
  |- unknown.gif

我们运行以上程序,输出如下:

Error occurs when opening image: input_dir/unknown.gif
Hash: 7e7e7e7e7e7e7e7e ['/path/to/cat1.jpg', '/path/to/cat2.jpg']

可以看到,输出结果中,我们 successfully detected 存在两张相同的图片(即cat1.jpg和cat2.jpg),并将它们的路径输出。

示例2:删除相同图片

继续以上面的文件夹为例,我们进一步修改代码,删除其中一张相同的图片。修改后的代码如下:

...
# 输出hash值相同的所有文件
for file_hash, file_list in hash_dict.items():
    if len(file_list) > 1:  # 如果存在多个文件hash值相同
        print("Hash: {}, {}".format(file_hash, file_list))

        # 删除某个相同图片
        os.remove(file_list[0])
...

接着,我们运行程序,再次遍历文件夹,发现cat1.jpg已被成功删除。接下来的文件夹内容如下:

input_dir/
  |- cat2.jpg
  |- dog.jpg
  |- unknown.gif

以上就是针对“python删除文件夹下相同文件和无法打开的图片”的完整攻略,细节步骤和示例说明都已介绍。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:python删除文件夹下相同文件和无法打开的图片 - Python技术站

(0)
上一篇 2023年6月3日
下一篇 2023年6月3日

相关文章

  • Python密码学XOR算法编码流程及乘法密码教程

    标题:Python密码学XOR算法编码及乘法密码教程 XOR算法编码流程 1.输入明文和密钥。 2.将明文和密钥转化为二进制。 3.将明文和密钥按位异或。若明文和密钥同一位为0或1,则异或结果为0,否则为1。 4.将异或后的结果转化为十六进制,即为密文。 示例1: 明文:hello 密钥:world 1.明文和密钥转化为二进制为: hello:0110100…

    python 2023年5月31日
    00
  • 值得收藏的正则表达式大全

    值得收藏的正则表达式大全 正则表达式是一种用于描述字符串模式的语言,可以用于匹配、查找、替换和割字符串。在实际开发中,我们经常需要使用正则表达式来处理文本数据。本文将介绍一些值得收藏的正则表达式,包括匹配数字、匹配邮箱、匹配URL、匹配IP地址等。 匹配数字 匹配数字是正则表达式最基本的操作之一。下面是一些常用的匹配数字的正则表达式: \d:匹配任意数字。 …

    python 2023年5月14日
    00
  • OpenOffice Python 宏:在哪里可以找到有用的文档?

    【问题标题】:OpenOffice Python macros: Where can I find useful documentation?OpenOffice Python 宏:在哪里可以找到有用的文档? 【发布时间】:2023-04-07 15:40:01 【问题描述】: 我正在尝试为 OpenOffice Calc 创建一个宏,该宏将切换包含用户指定…

    Python开发 2023年4月8日
    00
  • Python创建或生成列表的操作方法

    当我们在Python编程中需要使用列表时,我们可以使用多种方式来创建或生成列表。下面将详细讲解Python创建或生成列表的操作方法,包括创建空列表、创建包含元素的列表、使用range()函数创建列表、使用列表推导式创建列表等。 创建空列表 创建空列表是Python中创建列表的最简单方法一。可以使用[]或list()来创建一个空列表。下面是两个示例,演示了如何…

    python 2023年5月13日
    00
  • Python打印scrapy蜘蛛抓取树结构的方法

    下面是关于「Python打印Scrapy蜘蛛抓取树结构的方法」的完整攻略。 背景 Scrapy 是一个流行的网络爬虫框架,常用于爬取互联网上的数据。在编写 Scrapy 蜘蛛时,有时需要查看抓取下来的数据的结构,方便调试和数据分析。本文将分享一些可以用于打印 Scrapy 蜘蛛抓取树结构的方法,希望对使用 Scrapy 的开发者有所帮助。 打印 Scrapy…

    python 2023年6月3日
    00
  • 我发现在 python 中为 numpy 数组编制索引很奇怪

    【问题标题】:I find indexing in python for numpy array weird我发现在 python 中为 numpy 数组编制索引很奇怪 【发布时间】:2023-04-05 05:50:01 【问题描述】: 我对 python 很陌生,我正在处理一些数据操作。我以为 numpy 中的索引会是 [row][column],但这不…

    Python开发 2023年4月5日
    00
  • Python 类的魔法属性用法实例分析

    Python 类的魔法属性用法实例分析。 什么是魔法属性 在Python中,我们经常会看到以双下划线开头和结尾的属性名,例如__init__、__str__等,这些属性也被称为魔法属性(Magic Method),因为它们有很强大的魔力,可以实现许多特殊的行为。 魔法属性的作用是用于定义类的特殊行为,我们可以在自定义类中重写这些属性,从而实现自定义的特殊行为…

    python 2023年6月7日
    00
  • 用Python计算三角函数之acos()方法的使用

    当我们需要计算三角函数时,acos()方法是非常有用的。acos()方法是Python 的标准数学库中的一部分,它可以计算给定角度的反余弦值,返回值范围是0-π。 以下是使用acos()方法计算三角函数的完整攻略: 1.引入math模块 首先,在使用acos()方法之前,需要引入Python的标准数学库 – math。代码如下所示: import math …

    python 2023年6月3日
    00
合作推广
合作推广
分享本页
返回顶部