python实现MD5进行文件去重的示例代码


Posted in Python onJuly 09, 2021
目录
  • 前言
  • 工作原理
  • 代码

 

前言

工作中偶尔会遇到文件去重的事情,收到一大堆文件,名称各不相同,分析文件的时候发现有不少重复的文件,导致工作效率低下,那么,这里就写了一个python脚本实现文件去重功能

 

工作原理

脚本会检查你给出的文件路径下的所有文件,然后计算每个文件的MD5值,并将其加入到一个列表中。

  • 如果某文件的MD5值不在列表中,就认定其是我们需要的文件,脚本会在桌面新建一个名为“去重结果”的文件夹,并将其复制到里面去。
  • 如果某文件的MD5值在列表中,就认定其不是我们需要的文件,不对其做任何处理。
  • 代码可以直接运行,无需做任何修改(除了安装可能缺少的库文件)

 

代码

import os
import shutil
import hashlib


# 对文件去重
# 计算每个文件的md5值,据此进行去重
def only_one(test_path):
    md5_list = []
    count = 0
    for current_folder, list_folders, files in os.walk(test_path):
        for file in files:
            file_path = current_folder + '\\' + file  # 获取每个文件的路径
            f = open(file_path, 'rb')  # 开始计算每个文件的md5值
            md5obj = hashlib.md5()
            md5obj.update(f.read())
            get_hash = md5obj.hexdigest()
            f.close()
            md5_value = str(get_hash).upper()
            # 开始去重
            if md5_value in md5_list:  # 如果这个文件的md5值曾经出现过,就不对它做任何处理
                count += 1
                print('\033[31m[-] 发现重复文件:\033[0m' + str(file))
            else:
                md5_list.append(md5_value)  # 如果这个文件的md5值不存在列表中,就添加进列表中
                shutil.copy(file_path, path1)
    print('\033[31m[-] 共发现重复文件:{}个\033[0m'.format(count))


if __name__ == '__main__':
    print('\033[4;33m[+] 此脚本会检查指定路径下的所有文件,通过计算文件的MD5值进行去重\033[0m')
    print('\033[4;33m[+] 去重后的文件会复制到桌面新文件夹中,源文件不会丢失\033[0m')
    path = input('\033[34m[+] 请输入文件夹地址:\033[0m')
    os.chdir(path)

    # path1 用来存放所有的去重结果
    desktop_path = os.path.join(os.path.expanduser("~"), 'Desktop')  # 获取桌面路径
    path1 = os.path.join(desktop_path, '去重结果')
    os.makedirs(path1)

    only_one(path)
    print('\033[32m[-] 现有非重复文件共计:{}个\033[0m'.format(len(os.listdir(path1))))

python实现MD5进行文件去重的示例代码

到此这篇关于python实现MD5进行文件去重的示例代码的文章就介绍到这了,更多相关python MD5文件去重内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
Python中让MySQL查询结果返回字典类型的方法
Aug 22 Python
Python使用smtplib模块发送电子邮件的流程详解
Jun 27 Python
python爬虫实现教程转换成 PDF 电子书
Feb 19 Python
python实现12306抢票及自动邮件发送提醒付款功能
Mar 08 Python
python中利用zfill方法自动给数字前面补0
Apr 10 Python
对numpy和pandas中数组的合并和拆分详解
Apr 11 Python
python使用多进程的实例详解
Sep 19 Python
Python实现常见的回文字符串算法
Nov 14 Python
pytorch 调整某一维度数据顺序的方法
Dec 08 Python
使用keras框架cnn+ctc_loss识别不定长字符图片操作
Jun 29 Python
基于python实现可视化生成二维码工具
Jul 08 Python
 Python 中 logging 模块使用详情
Mar 03 Python
深入浅析python3 依赖倒置原则(示例代码)
Jul 09 #Python
Python中Selenium对Cookie的操作方法
Python常用配置文件ini、json、yaml读写总结
图文详解matlab原始处理图像几何变换
Django中session进行权限管理的使用
python利用pandas分析学生期末成绩实例代码
使用pandas生成/读取csv文件的方法实例
You might like
PHP连接SQLServer2005 的问题解决方法
2010/07/19 PHP
使用PHP 5.0创建图形的巧妙方法
2010/10/12 PHP
基于initPHP的框架介绍
2013/04/18 PHP
PHP判断一个gif图片是否为动态图片的方法
2014/11/19 PHP
javascript 拖动表格行实现代码
2011/05/05 Javascript
P3P Header解决Cookie跨域的问题
2013/03/12 Javascript
sencha touch 模仿tabpanel导航栏TabBar的实例代码
2013/10/24 Javascript
Nodejs学习笔记之NET模块
2015/01/13 NodeJs
详解Document.Cookie
2015/12/25 Javascript
JS简单循环遍历json数组的方法
2016/04/22 Javascript
JS树形菜单组件Bootstrap TreeView使用方法详解
2016/12/21 Javascript
Vue-resource实现ajax请求和跨域请求示例
2017/02/23 Javascript
微信小程序左右滑动切换页面详解及实例代码
2017/02/28 Javascript
AngularJS中使用three.js的实例详解
2017/07/21 Javascript
简单实现js拖拽效果
2017/07/25 Javascript
深入浅出webpack之externals的使用
2017/12/04 Javascript
webpack4 SplitChunks实现代码分隔详解
2019/05/23 Javascript
layui自定义插件citySelect实现省市区三级联动选择
2019/07/26 Javascript
jQuery实现全选、反选和不选功能的方法详解
2019/12/04 jQuery
原生js实现的观察者和订阅者模式简单示例
2020/04/18 Javascript
node使用async_hooks模块进行请求追踪
2021/01/28 Javascript
[03:20]2015国际邀请赛全明星表演赛
2015/08/08 DOTA
django使用图片延时加载引起后台404错误
2017/04/18 Python
python算法题 链表反转详解
2019/07/02 Python
django迁移数据库错误问题解决
2019/07/29 Python
wxPython实现绘图小例子
2019/11/19 Python
深入了解如何基于Python读写Kafka
2019/12/31 Python
python实现横向拼接图片
2020/03/23 Python
pytorch学习教程之自定义数据集
2020/11/10 Python
css和css3弹性盒模型实现元素宽度(高度)自适应
2019/05/15 HTML / CSS
基于HTML5新特性Mutation Observer实现编辑器的撤销和回退操作
2016/01/11 HTML / CSS
小溪流的歌教学反思
2014/02/13 职场文书
英文导游词
2015/02/13 职场文书
销售员岗位职责范本
2015/04/11 职场文书
入党积极分子党支部意见
2015/06/02 职场文书
《云雀的心愿》教学反思
2016/02/23 职场文书