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实现一个简单的项目监控
Mar 31 Python
谈谈python中GUI的选择
Mar 01 Python
Python实现绘制双柱状图并显示数值功能示例
Jun 23 Python
Python列表(List)知识点总结
Feb 18 Python
Python语言检测模块langid和langdetect的使用实例
Feb 19 Python
通过shell+python实现企业微信预警
Mar 07 Python
详解Python计算机视觉 图像扭曲(仿射扭曲)
Mar 27 Python
Python使用MyQR制作专属动态彩色二维码功能
Jun 04 Python
解决python cv2.imread 读取中文路径的图片返回为None的问题
Jun 02 Python
Python求区间正整数内所有素数之和的方法实例
Oct 13 Python
教你怎么用Python实现多路径迷宫
Apr 29 Python
Python 数据可视化之Seaborn详解
Nov 02 Python
深入浅析python3 依赖倒置原则(示例代码)
Jul 09 #Python
Python中Selenium对Cookie的操作方法
Python常用配置文件ini、json、yaml读写总结
图文详解matlab原始处理图像几何变换
Django中session进行权限管理的使用
python利用pandas分析学生期末成绩实例代码
使用pandas生成/读取csv文件的方法实例
You might like
说说PHP的autoLoad自动加载机制
2012/09/27 PHP
thinkphp3.2.3 分页代码分享
2016/07/28 PHP
PHP+Ajax无刷新带进度条图片上传示例
2017/02/08 PHP
php中str_pad()函数用法分析
2017/03/28 PHP
Javascript YUI 读码日记之 YAHOO.util.Dom - Part.3
2008/03/22 Javascript
javascript cookies 设置、读取、删除实例代码
2010/04/12 Javascript
js 图片随机不定向浮动的实现代码
2013/07/02 Javascript
jQuery的选择器中的通配符使用介绍
2014/03/20 Javascript
jQuery中[attribute]选择器用法实例
2014/12/31 Javascript
基于jQuery的Web上传插件Uploadify使用示例
2016/05/19 Javascript
用AngularJS的指令实现tabs切换效果
2016/08/31 Javascript
jQuery中ScrollTo用法示例
2016/09/04 Javascript
Vue.js快速入门教程
2016/09/07 Javascript
JS取数字小数点后两位或n位的简单方法
2016/10/24 Javascript
jQuery grep()方法详解及实例代码
2016/10/30 Javascript
微信小程序遇到修改数据后页面不渲染的问题解决
2017/03/09 Javascript
vue+webpack模拟后台数据的示例代码
2018/07/26 Javascript
layui实现左侧菜单点击右侧内容区显示
2019/07/26 Javascript
JavaScript设计模式之观察者模式与发布订阅模式详解
2020/05/07 Javascript
[01:47]2018年度DOTA2最具人气解说-完美盛典
2018/12/16 DOTA
[02:13] 完美世界DOTA2联赛PWL DAY5集锦
2020/11/03 DOTA
python写的一个文本编辑器
2014/01/23 Python
对numpy中数组元素的统一赋值实例
2018/04/04 Python
Python Django 实现简单注册功能过程详解
2019/07/29 Python
python中下标和切片的使用方法解析
2019/08/27 Python
Python基于Hypothesis测试库生成测试数据
2020/04/29 Python
周鸿祎:教你写创业计划书
2013/12/30 职场文书
初三化学教学反思
2014/01/23 职场文书
安全生产活动月方案
2014/03/09 职场文书
党支部综合考察材料
2014/05/19 职场文书
2014年幼师工作总结
2014/11/22 职场文书
总经理助理岗位职责范本
2015/03/31 职场文书
2015年党支部书记工作总结
2015/05/21 职场文书
个人更名证明
2015/06/23 职场文书
元宵节晚会主持词
2015/07/01 职场文书
分享15个Webpack实用的插件!!!
2021/03/31 Javascript