Python脚本:利用MD5哈希删除指定文件夹内的重复图片
本文介绍如何使用Python脚本自动删除指定文件夹中的重复图片。通过hashlib库计算文件MD5值进行比对,结合os模块遍历目录并移除重复项。脚本包含日志记录功能,适用于处理一般大小的图片文件,帮助快速清理下载或抓取产生的冗余数据。
Python删除重复文件脚本实现
此前的文章曾介绍过从网络抓取图片的方法,导致将某个笑话网站的全部图片下载到本地。然而,在抓取过程中产生了大量重复内容,例如页面其他位置的图片以及重复发布的图片。为了解决这一问题,编写了一个Python脚本,用于自动删除指定文件夹内的重复图片。
一、方法和思路
1. 判定文件是否相同的方法:利用hashlib库提供的获取文件MD5值的功能,通过比对MD5值来判断图片是否一致。
2. 文件操作相关库:os库提供了多种文件操作功能,例如os.remove()用于删除指定文件,os.listdir()用于获取指定文件夹路径下的所有文件名列表。
实现思路:首先获取指定文件夹内的所有文件名,并将其转换为绝对路径列表。随后循环遍历每个文件的MD5值,一旦发现MD5值重复,即执行删除操作。
二、代码实现
import os
import hashlib
import logging
import sys
def logger():
""" 获取logger"""
logger = logging.getLogger()
if not logger.handlers:
# 指定logger输出格式
formatter = logging.Formatter('%(asctime)s %(levelname)-8s: %(message)s')
# 文件日志
file_handler = logging.FileHandler("test.log")
file_handler.setFormatter(formatter) # 可以通过setFormatter指定输出格式
# 控制台日志
console_handler = logging.StreamHandler(sys.stdout)
console_handler.formatter = formatter # 也可以直接给formatter赋值
# 为logger添加的日志处理器
logger.addHandler(file_handler)
logger.addHandler(console_handler)
# 指定日志的最低输出级别,默认为WARN级别
logger.setLevel(logging.INFO)
return logger
def get_md5(filename):
m = hashlib.md5()
mfile = open(filename, "rb")
m.update(mfile.read())
mfile.close()
md5_value = m.hexdigest()
return md5_value
def get_urllist():
#替换指定的文件夹路径即可
base = ("F:\\pythonFile\\煎蛋网\\无聊图\\jpg\\")
list = os.listdir(base)
urlList=[]
for i in list:
url = base + i
urlList.append(url)
return urlList
if __name__ == '__main__':
log = logger()
md5List =[]
urlList =get_urllist()
for a in urlList:
md5 =get_md5(a)
if (md5 in md5List):
os.remove(a)
print("重复:%s"%a)
log.info("重复:%s"%a)
else:
md5List.append(md5)
# print(md5List)
print("一共%s张照片"%len(md5List))
可以通过日志功能查看具体哪些文件被判定为重复。需要注意的是,对于超大文件,MD5值的计算过程可能会发生变化或耗时较长,但该脚本足以处理一般大小的文件。只需替换脚本中的路径配置,即可在本地电脑上运行。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持本站。
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













