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中decorator使用实例
Apr 14 Python
python列出目录下指定文件与子目录的方法
Jul 03 Python
使用FastCGI部署Python的Django应用的教程
Jul 22 Python
一个基于flask的web应用诞生 bootstrap框架美化(3)
Apr 11 Python
python实现给微信公众号发送消息的方法
Jun 30 Python
python生成ppt的方法
Jun 07 Python
pandas将numpy数组写入到csv的实例
Jul 04 Python
python 递归深度优先搜索与广度优先搜索算法模拟实现
Oct 22 Python
pandas DataFrame 数据选取,修改,切片的实现
Apr 24 Python
Python实现计算图像RGB均值方式
Jun 04 Python
详解使用Python写一个向数据库填充数据的小工具(推荐)
Sep 11 Python
把Anaconda中的环境导入到Pycharm里面的方法步骤
Oct 30 Python
深入浅析python3 依赖倒置原则(示例代码)
Jul 09 #Python
Python中Selenium对Cookie的操作方法
Python常用配置文件ini、json、yaml读写总结
图文详解matlab原始处理图像几何变换
Django中session进行权限管理的使用
python利用pandas分析学生期末成绩实例代码
使用pandas生成/读取csv文件的方法实例
You might like
smarty静态实验表明,网络上是错的~呵呵
2006/11/25 PHP
使用PHP实现蜘蛛访问日志统计
2013/07/05 PHP
封装ThinkPHP的一个文件上传方法实例
2014/10/31 PHP
列举PHP的Yii 2框架的开发优势
2015/07/03 PHP
PHP实现简单的新闻发布系统实例
2015/07/28 PHP
PHP+MySQL实现的简单投票系统实例
2016/02/24 PHP
phpcms的分类名称和类别名称的调用
2017/01/05 PHP
jQuery autocomplete插件修改
2009/04/17 Javascript
网站页面自动跳转实现方法PHP、JSP(上)
2010/08/01 Javascript
基于jquery的DIV随滚动条滚动而滚动的代码
2012/07/20 Javascript
JS下拉缓冲菜单示例代码
2013/08/30 Javascript
Node.js中使用Buffer编码、解码二进制数据详解
2014/08/16 Javascript
浅谈JS日期(Date)处理函数
2014/12/07 Javascript
JavaScript中的值类型详细介绍
2014/12/29 Javascript
关于动态生成dom绑定事件失效的原因及解决方法
2016/08/06 Javascript
jQuery中DOM节点删除之empty与remove
2017/01/20 Javascript
jquery实现下拉框左右选择功能
2017/02/21 Javascript
jQuery实现base64前台加密解密功能详解
2017/08/29 jQuery
深入浅析Vue全局组件与局部组件的区别
2018/06/15 Javascript
你不知道的Vue技巧之--开发一个可以通过方法调用的组件(推荐)
2019/04/15 Javascript
原生JS利用transform实现banner的无限滚动示例代码
2020/06/15 Javascript
[02:12]Dota 2 推出全新英雄—— 电炎绝手
2019/08/23 DOTA
Python3.6正式版新特性预览
2016/12/15 Python
python安装oracle扩展及数据库连接方法
2017/02/21 Python
Python3之读取连接过的网络并定位的方法
2018/04/22 Python
itchat-python搭建微信机器人(附示例)
2019/06/11 Python
Python基于yaml文件配置logging日志过程解析
2020/06/23 Python
各大浏览器 CSS3 和 HTML5 兼容速查表 图文
2010/04/01 HTML / CSS
欧洲最大的高尔夫零售商:American Golf
2019/09/02 全球购物
什么是lambda函数
2013/09/17 面试题
城市精细化管理实施方案
2014/03/04 职场文书
机电一体化应届生求职信
2014/08/09 职场文书
村主任个人对照检查材料
2014/10/01 职场文书
行政申诉状范文
2015/05/20 职场文书
草房子读书笔记
2015/06/29 职场文书
Ajax实现异步加载数据
2021/11/17 Javascript