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数据结构之链表详解
Sep 12 Python
Python设计模式之工厂模式简单示例
Jan 09 Python
Python闭包之返回函数的函数用法示例
Jan 27 Python
Django中多种重定向方法使用详解
Jul 17 Python
Python 类属性与实例属性,类对象与实例对象用法分析
Sep 20 Python
Python操作SQLite/MySQL/LMDB数据库的方法
Nov 07 Python
django商品分类及商品数据建模实例详解
Jan 03 Python
使用python从三个角度解决josephus问题的方法
Mar 27 Python
如何在Python 游戏中模拟引力
Mar 27 Python
python有几个版本
Jun 17 Python
在pycharm创建scrapy项目的实现步骤
Dec 01 Python
python自动计算图像数据集的RGB均值
Jun 18 Python
深入浅析python3 依赖倒置原则(示例代码)
Jul 09 #Python
Python中Selenium对Cookie的操作方法
Python常用配置文件ini、json、yaml读写总结
图文详解matlab原始处理图像几何变换
Django中session进行权限管理的使用
python利用pandas分析学生期末成绩实例代码
使用pandas生成/读取csv文件的方法实例
You might like
国内php原创论坛
2006/10/09 PHP
php之curl设置超时实例
2014/11/03 PHP
php自动提交表单的方法(基于fsockopen与curl)
2016/05/09 PHP
Laravel 6 将新增为指定队列任务设置中间件的功能
2019/08/06 PHP
js获取URL的参数的方法(getQueryString)示例
2013/09/29 Javascript
zTree插件之单选下拉菜单实例代码
2013/11/07 Javascript
Javascript this 关键字 详解
2014/10/22 Javascript
node.js中使用socket.io的方法
2014/12/15 Javascript
JS实现密码框根据焦点的获取与失去控制文字的消失与显示效果
2015/11/26 Javascript
关于JavaScript作用域你想知道的一切
2016/02/04 Javascript
jQuery实现的多滑动门,多选项卡效果代码
2016/03/28 Javascript
vue移动端裁剪图片结合插件Cropper的使用实例代码
2017/07/10 Javascript
详解vue axios中文文档
2017/09/12 Javascript
angularjs实现时间轴效果的示例代码
2017/11/29 Javascript
p5.js入门教程之平滑过渡(Easing)
2018/03/16 Javascript
简单谈谈javascript高级特性
2019/09/04 Javascript
Vue列表如何实现滚动到指定位置样式改变效果
2020/05/09 Javascript
Vue + element 实现多选框组并保存已选id集合的示例代码
2020/06/03 Javascript
Python中使用md5sum检查目录中相同文件代码分享
2015/02/02 Python
简单谈谈Python中的几种常见的数据类型
2017/02/10 Python
python批量读取txt文件为DataFrame的方法
2018/04/03 Python
Python实现的基于优先等级分配糖果问题算法示例
2018/04/25 Python
wtfPython—Python中一组有趣微妙的代码【收藏】
2018/08/31 Python
Python统计一个字符串中每个字符出现了多少次的方法【字符串转换为列表再统计】
2019/05/05 Python
python的pstuil模块使用方法总结
2019/07/26 Python
Python2 与Python3的版本区别实例分析
2020/03/30 Python
python中Mako库实例用法
2020/12/31 Python
Python之多进程与多线程的使用
2021/02/23 Python
详解使用CSS3的@media来编写响应式的页面
2017/11/01 HTML / CSS
详解canvas绘图时遇到的跨域问题
2018/03/22 HTML / CSS
屈臣氏官方旗舰店:亚洲享负盛名的保健及美妆零售商
2019/03/15 全球购物
大学生志愿者活动总结
2014/06/27 职场文书
2014年统计工作总结
2014/11/21 职场文书
期末复习计划
2015/01/19 职场文书
2015年度团总支工作总结
2015/04/23 职场文书
暑期家教宣传单
2015/07/14 职场文书