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操作xml文件示例
Apr 07 Python
Python 2.7.x 和 3.x 版本的重要区别小结
Nov 28 Python
简单实现Python爬取网络图片
Apr 01 Python
Python使用ConfigParser模块操作配置文件的方法
Jun 29 Python
python调用c++传递数组的实例
Feb 13 Python
python批量下载抖音视频
Jun 17 Python
浅谈Django+Gunicorn+Nginx部署之路
Sep 11 Python
基于python解线性矩阵方程(numpy中的matrix类)
Oct 21 Python
windows环境中利用celery实现简单任务队列过程解析
Nov 29 Python
Django关于admin的使用技巧和知识点
Feb 10 Python
如何完美的建立一个python项目
Oct 09 Python
Matplotlib animation模块实现动态图
Feb 25 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利用imagemagick实现复古老照片效果实例
2017/02/16 PHP
Laravel学习教程之View模块详解
2017/09/18 PHP
php 根据URL下载远程图片、压缩包、pdf等文件到本地
2019/07/26 PHP
JavaScript面象对象设计
2008/04/28 Javascript
JavaScript 变量作用域分析
2011/07/04 Javascript
javascript中定义类的方法汇总
2014/12/28 Javascript
jQuery中prepend()方法使用详解
2015/08/11 Javascript
学习javascript面向对象 理解javascript对象
2016/01/04 Javascript
js判断当前页面用什么浏览器打开的方法
2016/01/06 Javascript
解决前端跨域问题方案汇总
2016/11/20 Javascript
JavaScript实现父子dom同时绑定两个点击事件,一个用捕获,一个用冒泡时执行顺序的方法
2017/03/30 Javascript
详解nodeJS之路径PATH模块
2017/05/31 NodeJs
微信小程序顶部可滚动导航效果
2017/10/31 Javascript
深入理解Vue Computed计算属性原理
2018/05/29 Javascript
Vue 实现列表动态添加和删除的两种方法小结
2018/09/07 Javascript
微信小程序登录态和检验注册过没的app.js写法
2019/05/22 Javascript
JavaScript onclick事件使用方法详解
2020/05/15 Javascript
Element InputNumber 计数器的实现示例
2020/08/03 Javascript
JavaScript Dom实现轮播图原理和实例
2021/02/19 Javascript
[01:56]林书豪DOTA2上海特级锦标赛励志短片
2016/03/05 DOTA
python访问sqlserver示例
2014/02/10 Python
Django使用中间键实现csrf认证详解
2019/07/22 Python
python3.8与pyinstaller冲突问题的快速解决方法
2020/01/16 Python
Python 解决火狐浏览器不弹出下载框直接下载的问题
2020/03/09 Python
python+appium+yaml移动端自动化测试框架实现详解
2020/11/24 Python
2020年10款优秀的Python第三方库,看看有你中意的吗?
2021/01/12 Python
Harman Audio官方商店:购买JBL、Harman Kardon、Infinity和AKG
2019/12/05 全球购物
党员自我评价分享
2013/12/13 职场文书
会计出纳岗位职责
2013/12/25 职场文书
经济贸易系求职信
2014/08/04 职场文书
2014年审计人员工作总结
2014/12/19 职场文书
2015年学校党支部工作总结
2015/04/01 职场文书
乒乓球比赛通知
2015/04/27 职场文书
Django项目配置Memcached和Redis, 缓存选择哪个更有优势
2021/04/06 Python
详细介绍python类及类的用法
2021/05/31 Python
关于SpringBoot 使用 Redis 分布式锁解决并发问题
2021/11/17 Redis