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中的URLError异常的方法
Apr 30 Python
Python的Flask开发框架简单上手笔记
Nov 16 Python
Python常用库推荐
Dec 04 Python
Python查找文件中包含中文的行方法
Dec 19 Python
Python转换时间的图文方法
Jul 01 Python
浅谈Python 敏感词过滤的实现
Aug 15 Python
opencv 获取rtsp流媒体视频的实现方法
Aug 23 Python
如何使用Python脚本实现文件拷贝
Nov 20 Python
解决os.path.isdir() 判断文件夹却返回false的问题
Nov 29 Python
简单了解Java Netty Reactor三种线程模型
Apr 26 Python
python requests.get带header
May 05 Python
python实现MD5进行文件去重的示例代码
Jul 09 Python
深入浅析python3 依赖倒置原则(示例代码)
Jul 09 #Python
Python中Selenium对Cookie的操作方法
Python常用配置文件ini、json、yaml读写总结
图文详解matlab原始处理图像几何变换
Django中session进行权限管理的使用
python利用pandas分析学生期末成绩实例代码
使用pandas生成/读取csv文件的方法实例
You might like
表单复选框向PHP传输数据的代码
2007/11/13 PHP
php抓取网站图片并保存的实现方法
2015/10/29 PHP
php自定义时间转换函数示例
2016/12/07 PHP
PHP设计模式之数据访问对象模式(DAO)原理与用法实例分析
2019/12/12 PHP
JS trim去空格的最佳实践
2011/10/30 Javascript
jquery解析xml字符串简单示例
2014/04/11 Javascript
JavaScript中的公有、私有、特权和静态成员用法分析
2014/11/20 Javascript
jquery.ajax之beforeSend方法使用介绍
2014/12/08 Javascript
基于jQuery下拉选择框插件支持单选多选功能代码
2016/06/07 Javascript
jQuery组件easyui基本布局实现代码
2016/08/25 Javascript
jQuery中delegate()方法的用法详解
2016/10/13 Javascript
JavaScript省市级联下拉菜单实例
2017/02/14 Javascript
js弹出窗口简单实现代码
2017/03/22 Javascript
使用bootstrap插件实现模态框效果
2017/05/10 Javascript
vue中七牛插件使用的实例代码
2017/07/28 Javascript
vue2.0在table中实现全选和反选的示例代码
2017/11/04 Javascript
基于JavaScript实现五子棋游戏
2020/08/26 Javascript
webpack打包js文件及部署的实现方法
2017/12/18 Javascript
angular.js实现列表orderby排序的方法
2018/10/02 Javascript
axios如何利用promise无痛刷新token的实现方法
2019/08/27 Javascript
javascript实现蒙版与禁止页面滚动
2020/01/11 Javascript
JavaScript运行机制实例分析
2020/04/11 Javascript
浅谈在vue-cli3项目中解决动态引入图片img404的问题
2020/08/04 Javascript
js实现扫雷源代码
2020/11/27 Javascript
[38:23]2014 DOTA2国际邀请赛中国区预选赛 5 23 CIS VS LGD第一场
2014/05/24 DOTA
python实现linux下使用xcopy的方法
2015/06/28 Python
pygame 精灵的行走及二段跳的实现方法(必看篇)
2017/07/10 Python
对Python获取屏幕截图的4种方法详解
2019/08/27 Python
python numpy库linspace相同间隔采样的实现
2020/02/25 Python
解决flask接口返回的内容中文乱码的问题
2020/04/03 Python
安装Anaconda3及使用Jupyter的方法
2020/10/27 Python
教师绩效考核方案
2014/01/21 职场文书
校园十佳歌手策划书
2014/01/22 职场文书
2015年秘书个人工作总结
2015/04/25 职场文书
Mysql 用户权限管理实现
2021/05/25 MySQL
详解OpenCV曝光融合
2022/04/29 Python