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异步回调机制实现和使用方法
Nov 26 Python
浅谈Matplotlib简介和pyplot的简单使用——文本标注和箭头
Jan 09 Python
对python GUI实现完美进度条的示例详解
Dec 13 Python
Python实现12306火车票抢票系统
Jul 04 Python
Django Rest framework认证组件详细用法
Jul 25 Python
简单了解python调用其他脚本方法实例
Mar 26 Python
tensorflow使用CNN分析mnist手写体数字数据集
Jun 17 Python
使用pytorch 筛选出一定范围的值
Jun 28 Python
Python多线程的退出控制实现
Aug 10 Python
基于python实现图片转字符画代码实例
Sep 04 Python
python实现三壶谜题的示例详解
Nov 02 Python
python re模块常见用法例举
Mar 01 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
PHP函数getenv简介和使用实例
2014/05/12 PHP
ThinkPHP函数详解之M方法和R方法
2015/09/10 PHP
PHP Imagick完美实现图片裁切、生成缩略图、添加水印
2016/02/22 PHP
取得传值的函数
2006/10/27 Javascript
jQuery 表单验证插件formValidation实现个性化错误提示
2009/06/23 Javascript
Javascript 八进制转义字符(8进制)
2011/04/08 Javascript
基于jquery封装的一个js分页
2011/11/15 Javascript
formvalidator验证插件中有关ajax验证问题
2013/01/04 Javascript
如何让easyui gridview 宽度自适应窗口改变及fitColumns应用
2013/01/25 Javascript
js实现编辑div节点名称的方法
2014/12/17 Javascript
AngularJS基础学习笔记之表达式
2015/05/10 Javascript
jQuery实现Flash效果上下翻动的中英文导航菜单代码
2015/09/22 Javascript
基于jQuery实现表格内容的筛选功能
2016/08/21 Javascript
BootStrap实现带有增删改查功能的表格(DEMO详解)
2016/10/26 Javascript
Node.js安装配置图文教程
2017/05/10 Javascript
weui框架实现上传、预览和删除图片功能代码
2017/08/24 Javascript
JS数组去重常用方法实例小结【4种方法】
2018/05/28 Javascript
弱类型语言javascript开发中的一些坑实例小结【变量、函数、数组、对象、作用域等】
2019/08/07 Javascript
微信小程序button标签open-type属性原理解析
2020/01/21 Javascript
vue大型项目之分模块运行/打包的实现
2020/09/21 Javascript
vue中实现弹出层动画效果的示例代码
2020/09/25 Javascript
vant中的toast层级改变操作
2020/11/04 Javascript
[02:34]2016完美“圣”典风云人物:BurNIng专访
2016/12/10 DOTA
Python中的startswith和endswith函数使用实例
2014/08/25 Python
Python抽象和自定义类定义与用法示例
2018/08/23 Python
Python实现的微信支付方式总结【三种方式】
2019/04/13 Python
详解Python3 对象组合zip()和回退方式*zip
2019/05/15 Python
HTML5自定义mp3播放器源码
2020/01/06 HTML / CSS
意大利火车票和铁路通行证专家:ItaliaRail
2019/01/22 全球购物
《厄运打不垮的信念》教学反思
2014/04/13 职场文书
资产运营委托书范本
2014/10/16 职场文书
餐饮店长岗位职责
2015/04/14 职场文书
实习证明模板
2015/06/16 职场文书
企业财务管理制度范本
2015/08/04 职场文书
小学班主任工作随笔
2015/08/15 职场文书
Vue elementUI表单嵌套表格并对每行进行校验详解
2022/02/18 Vue.js