python删除本地夹里重复文件的方法


Posted in Python onNovember 19, 2020

上次的博文主要说了从网上下载图片,于是我把整个笑话网站的图片都拔下来了,但是在拔取的图片中有很多重复的,比如说页面的其他图片、重复发布的图片等等。所以我又找了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值的获取会有一些变化,不过处理一般的小文件都可以的,只需要替换我的路径,就可以在你电脑上运行啦。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python根据经纬度计算距离示例
Feb 16 Python
windows下Python实现将pdf文件转化为png格式图片的方法
Jul 21 Python
Python实现的井字棋(Tic Tac Toe)游戏示例
Jan 31 Python
Linux 修改Python命令的方法示例
Dec 03 Python
django 2.2和mysql使用的常见问题
Jul 18 Python
使用virtualenv创建Python环境及PyQT5环境配置的方法
Sep 10 Python
手把手教你Python yLab的绘制折线图的画法
Oct 23 Python
python使用opencv在Windows下调用摄像头实现解析
Nov 26 Python
Python如何使用paramiko模块连接linux
Mar 18 Python
python中用ctypes模拟点击的实例讲解
Nov 26 Python
发工资啦!教你用Python实现邮箱自动群发工资条
May 10 Python
尝试使用Python爬取城市租房信息
Apr 12 Python
Python处理命令行参数模块optpars用法实例分析
May 31 #Python
python筛选出两个文件中重复行的方法
May 31 #Python
python删除文本中行数标签的方法
May 31 #Python
Python使用wget实现下载网络文件功能示例
May 31 #Python
Python使用progressbar模块实现的显示进度条功能
May 31 #Python
python调用Matplotlib绘制分布点并且添加标签
May 31 #Python
python批量修改文件编码格式的方法
May 31 #Python
You might like
桌面中心(二)数据库写入
2006/10/09 PHP
php中使用__autoload()自动加载未定义类的实现代码
2013/02/06 PHP
ThinkPHP之A方法实例讲解
2014/06/20 PHP
AJAX使用了UpdatePanel后无法使用alert弹出脚本
2010/04/02 Javascript
js 中{},[]中括号,大括号使用详解
2011/05/12 Javascript
理解JavaScript原型链
2016/10/25 Javascript
Angular企业级开发——MVC之控制器详解
2017/02/20 Javascript
详解关于react-redux中的connect用法介绍及原理解析
2017/09/11 Javascript
修改UA在PC中访问只能在微信中打开的链接方法
2017/11/27 Javascript
详解vue beforeRouteEnter 异步获取数据给实例问题
2019/08/09 Javascript
15个简单的JS编码标准让你的代码更整洁(小结)
2020/07/16 Javascript
[34:44]Liquid vs TNC Supermajor 胜者组 BO3 第二场 6.4
2018/06/05 DOTA
Python bsddb模块操作Berkeley DB数据库介绍
2015/04/08 Python
Django中传递参数到URLconf的视图函数中的方法
2015/07/18 Python
Python实例一个类背后发生了什么
2016/02/09 Python
Python中matplotlib中文乱码解决办法
2017/05/12 Python
python文件特定行插入和替换实例详解
2017/07/12 Python
python3.4下django集成使用xadmin后台的方法
2017/08/15 Python
flask + pymysql操作Mysql数据库的实例
2017/11/13 Python
Python Numpy:找到list中的np.nan值方法
2018/10/30 Python
利用python将图片版PDF转文字版PDF
2019/05/03 Python
Python序列对象与String类型内置方法详解
2019/10/22 Python
python tornado使用流生成图片的例子
2019/11/18 Python
Django 解决model 反向引用中的related_name问题
2020/05/19 Python
详解pytorch中squeeze()和unsqueeze()函数介绍
2020/09/03 Python
python cookie反爬处理的实现
2020/11/01 Python
纯CSS3实现移动端展开和收起效果的示例代码
2020/04/26 HTML / CSS
领先的荷兰线上超市:荷兰之家Holland at Home(支持中文)
2021/01/21 全球购物
信息技术教学反思
2014/02/12 职场文书
优秀实习生感言
2014/03/01 职场文书
社区消防工作实施方案
2014/03/21 职场文书
档案信息化建设方案
2014/05/16 职场文书
经济管理自荐书
2014/06/09 职场文书
护士找工作求职信
2014/07/02 职场文书
经验交流材料格式
2014/12/30 职场文书
SQL Server一个字符串拆分多行显示或者多行数据合并成一个字符串
2022/05/25 SQL Server