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 元组(Tuple)操作详解
Mar 11 Python
用Python代码来绘制彭罗斯点阵的教程
Apr 03 Python
Python中的面向对象编程详解(下)
Apr 13 Python
浅谈python中的getattr函数 hasattr函数
Jun 14 Python
Python增量循环删除MySQL表数据的方法
Sep 23 Python
python取代netcat过程分析
Feb 10 Python
详解TensorFlow在windows上安装与简单示例
Mar 05 Python
用python编写第一个IDA插件的实例
May 29 Python
Python动态导入模块的方法实例分析
Jun 28 Python
使用urllib库的urlretrieve()方法下载网络文件到本地的方法
Dec 19 Python
Python如何将模块打包并发布
Aug 30 Python
用Python实现童年贪吃蛇小游戏功能的实例代码
Dec 07 Python
深入浅析python3 依赖倒置原则(示例代码)
Jul 09 #Python
Python中Selenium对Cookie的操作方法
Python常用配置文件ini、json、yaml读写总结
图文详解matlab原始处理图像几何变换
Django中session进行权限管理的使用
python利用pandas分析学生期末成绩实例代码
使用pandas生成/读取csv文件的方法实例
You might like
PHP SFTP实现上传下载功能
2017/07/26 PHP
PHP模糊查询技术实例分析【附源码下载】
2019/03/07 PHP
PHP pthreads v3下worker和pool的使用方法示例
2020/02/21 PHP
google 搜索框添加关键字实现代码
2010/04/24 Javascript
js FLASH幻灯片字符串中有连接符&的处理方法
2012/03/01 Javascript
浅析javascript中的事件代理
2015/11/06 Javascript
jQuery实现文本框邮箱输入自动补全效果
2015/11/17 Javascript
vue2.0父子组件及非父子组件之间的通信方法
2017/01/21 Javascript
jQuery实现表格冻结顶栏效果
2017/08/20 jQuery
JS实现自定义状态栏动画文字效果示例
2017/10/12 Javascript
js判断传入时间和当前时间大小实例(超简单)
2018/01/11 Javascript
JS运动特效之任意值添加运动的方法分析
2018/01/24 Javascript
图文介绍Vue父组件向子组件传值
2018/02/17 Javascript
vue动态子组件的两种实现方式
2019/09/01 Javascript
vue项目从node8.x升级到12.x后的问题解决
2019/10/25 Javascript
JQuery事件冒泡和默认行为代码实例
2020/05/13 jQuery
2020京东618叠蛋糕js脚本(亲测好用)
2020/06/02 Javascript
[55:25]VGJ.T vs Optic Supermajor小组赛D组 BO3 第三场 6.3
2018/06/04 DOTA
Python的装饰器使用详解
2017/06/26 Python
Python创建对称矩阵的方法示例【基于numpy模块】
2017/10/12 Python
python模块smtplib实现纯文本邮件发送功能
2018/05/22 Python
Django添加favicon.ico图标的示例代码
2018/08/07 Python
PyQt5通信机制 信号与槽详解
2019/08/07 Python
美国浴缸、水槽和水龙头购物网站:Vintage Tub & Bath
2019/11/05 全球购物
给男朋友的道歉信
2014/01/12 职场文书
关于迟到的检讨书
2014/01/26 职场文书
校园广播稿500字
2014/02/04 职场文书
产品质量承诺范本
2014/03/31 职场文书
班组长安全工作职责
2014/07/15 职场文书
2014年电话客服工作总结
2014/12/09 职场文书
小学班主任评语
2014/12/29 职场文书
单位计划生育责任书
2015/05/09 职场文书
团组织关系介绍信
2019/06/24 职场文书
8g内存用python读取10文件_面试题-python 如何读取一个大于 10G 的txt文件?
2021/05/28 Python
css filter和getUserMedia的联合使用
2022/02/24 HTML / CSS
十大最强水系宝可梦,最美宝可梦排第三,榜首大家最熟悉
2022/03/18 日漫