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操作串口的方法
Jun 17 Python
python print 按逗号或空格分隔的方法
May 02 Python
在python中bool函数的取值方法
Nov 01 Python
python爬取淘宝商品销量信息
Nov 16 Python
在pycharm上mongodb配置及可视化设置方法
Nov 30 Python
Python socket模块实现的udp通信功能示例
Apr 10 Python
使用Python制作简单的小程序IP查看器功能
Apr 16 Python
python关于矩阵重复赋值覆盖问题的解决方法
Jul 19 Python
python 解决flask uwsgi 获取不到全局变量的问题
Dec 22 Python
django 连接数据库出现1045错误的解决方式
May 14 Python
python3代码中实现加法重载的实例
Dec 03 Python
python神经网络学习 使用Keras进行简单分类
May 04 Python
深入浅析python3 依赖倒置原则(示例代码)
Jul 09 #Python
Python中Selenium对Cookie的操作方法
Python常用配置文件ini、json、yaml读写总结
图文详解matlab原始处理图像几何变换
Django中session进行权限管理的使用
python利用pandas分析学生期末成绩实例代码
使用pandas生成/读取csv文件的方法实例
You might like
使用php判断服务器是否支持Gzip压缩功能
2013/09/24 PHP
Zend Framework实现多服务器共享SESSION数据的方法
2016/03/22 PHP
PHP后端银联支付及退款实例代码
2017/06/23 PHP
YII框架实现自定义第三方扩展操作示例
2019/04/26 PHP
laravel实现图片上传预览,及编辑时可更换图片,并实时变化的例子
2019/11/14 PHP
js创建对象的几种常用方式小结(推荐)
2010/10/24 Javascript
腾讯的ip接口 方便获取当前用户的ip地理位置
2010/11/25 Javascript
js对象继承之原型链继承实例
2015/01/10 Javascript
JS实现网页滚动条感应鼠标变色的方法
2015/02/26 Javascript
jquery实现的缩略图预览滑块实例
2015/06/25 Javascript
js实现简洁大方的二级下拉菜单效果代码
2015/09/01 Javascript
JavaScript中setTimeout和setInterval函数的传参及调用
2016/03/11 Javascript
Seajs 简易文档 提供简单、极致的模块化开发体验
2016/04/13 Javascript
Javascript类型系统之undefined和null浅析
2016/07/13 Javascript
原生Javascript插件开发实践
2017/01/18 Javascript
Vue响应式原理详解
2017/04/18 Javascript
EL表达式截取字符串的函数说明
2017/09/22 Javascript
vue.js语法及常用指令
2017/10/29 Javascript
nodejs高大上的部署方式(PM2)
2018/09/11 NodeJs
Vue源码解析之数组变异的实现
2018/12/04 Javascript
[01:45:05]VGJ.T vs Newbee Supermajor 败者组 BO3 第二场 6.6
2018/06/07 DOTA
详解Python程序与服务器连接的WSGI接口
2015/04/29 Python
PyGame贪吃蛇的实现代码示例
2018/11/21 Python
详解python解压压缩包的五种方法
2019/07/05 Python
CSS3 3D旋转rotate效果实例介绍
2016/05/03 HTML / CSS
DHC中国官方购物网站:日本通信销售No.1化妆品
2016/08/20 全球购物
Snapfish爱尔兰:在线照片打印和个性化照片礼品
2018/09/17 全球购物
应届生污水处理求职信
2013/11/06 职场文书
护士辞职信范文
2014/01/19 职场文书
《桂林山水》教学反思
2014/02/08 职场文书
市场部经理岗位职责
2014/04/10 职场文书
医药营销个人求职信
2014/04/12 职场文书
《孔繁森》教学反思
2014/04/17 职场文书
个人专业技术总结
2015/03/05 职场文书
2015年国庆节慰问信
2015/03/23 职场文书
人物搭配车车超萌联名预备中 【咒术迴战】 ⨯ 【天竺鼠车车】 展开合作
2022/04/11 日漫