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 相关文章推荐
通过C++学习Python
Jan 20 Python
python利用paramiko连接远程服务器执行命令的方法
Oct 16 Python
Python实现列表删除重复元素的三种常用方法分析
Nov 24 Python
详解python3中zipfile模块用法
Jun 18 Python
python判断完全平方数的方法
Nov 13 Python
使用celery执行Django串行异步任务的方法步骤
Jun 06 Python
pyqt5 删除layout中的所有widget方法
Jun 25 Python
python读写csv文件的方法
Aug 13 Python
python 如何去除字符串头尾的多余符号
Nov 19 Python
Python中的xlrd模块使用原理解析
May 21 Python
如何清空python的变量
Jul 05 Python
python基础入门之字典和集合
Jun 13 Python
深入浅析python3 依赖倒置原则(示例代码)
Jul 09 #Python
Python中Selenium对Cookie的操作方法
Python常用配置文件ini、json、yaml读写总结
图文详解matlab原始处理图像几何变换
Django中session进行权限管理的使用
python利用pandas分析学生期末成绩实例代码
使用pandas生成/读取csv文件的方法实例
You might like
PHP生成带有雪花背景的验证码
2008/09/28 PHP
JS中encodeURIComponent函数用php解码的代码
2012/03/01 PHP
PHP中使用xmlreader读取xml数据示例
2014/12/29 PHP
PHP的Yii框架中行为的定义与绑定方法讲解
2016/03/18 PHP
PHP对象实例化单例方法
2017/01/19 PHP
js事件(Event)知识整理
2012/10/11 Javascript
Jquery实现页面加载时弹出对话框代码
2013/04/19 Javascript
关于js数组去重的问题小结
2014/01/24 Javascript
NodeJS制作爬虫全过程
2014/12/22 NodeJs
jQuery+HTML5美女瀑布流布局实现方法
2015/09/21 Javascript
jQuery实现标题有打字效果的焦点图代码
2015/11/16 Javascript
两种方法解决javascript url post 特殊字符转义 + & #
2016/04/13 Javascript
JavaScript 输出显示内容(document.write、alert、innerHTML、console.log)
2016/12/14 Javascript
详解如何将angular-ui的图片轮播组件封装成一个指令
2017/05/09 Javascript
javascript实现文字无缝滚动效果
2017/08/26 Javascript
Javascript的console['']常用输入方法汇总
2018/04/26 Javascript
深入理解Vue Computed计算属性原理
2018/05/29 Javascript
在vue项目中引用Iview的方法
2018/09/14 Javascript
Vue使用watch监听一个对象中的属性的实现方法
2019/05/10 Javascript
layui写后台表格思路和赋值用法详解
2019/11/14 Javascript
Python Web框架Pylons中使用MongoDB的例子
2013/12/03 Python
python查找目录下指定扩展名的文件实例
2015/04/01 Python
详解Python中的循环语句的用法
2015/04/09 Python
python 判断网络连通的实现方法
2018/04/22 Python
使用PyQt5实现图片查看器的示例代码
2020/04/21 Python
Python接口测试环境搭建过程详解
2020/06/29 Python
阿迪达斯奥地利官方商城:adidas.at
2016/10/16 全球购物
cosme官方海外旗舰店:日本最大化妆品和美容产品的综合口碑网站
2017/01/18 全球购物
在Ajax应用中信息是如何在浏览器和服务器之间传递的
2016/05/31 面试题
公务员政审个人总结
2015/02/12 职场文书
2015年学生资助工作总结
2015/05/25 职场文书
2015年党小组工作总结
2015/05/26 职场文书
债务追讨律师函
2015/06/24 职场文书
化验室安全管理制度
2015/08/06 职场文书
k8s部署redis cluster集群的实现
2021/06/24 Redis
如何设置多台电脑共享打印机?多台电脑共享打印机的方法
2022/04/08 数码科技