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双向链表实现实例代码
Nov 21 Python
python写入中英文字符串到文件的方法
May 06 Python
python获取当前时间对应unix时间戳的方法
May 15 Python
python实现多线程抓取知乎用户
Dec 12 Python
Python实现压缩和解压缩ZIP文件的方法分析
Sep 28 Python
TensorFlow 合并/连接数组的方法
Jul 27 Python
对web.py设置favicon.ico的方法详解
Dec 04 Python
基于Python打造账号共享浏览器功能
May 30 Python
Python+numpy实现矩阵的行列扩展方式
Nov 29 Python
Python使用os.listdir和os.walk获取文件路径
May 21 Python
如何正确理解python装饰器
Jun 15 Python
Python尝试实现蒙特卡罗模拟期权定价
Apr 21 Python
深入浅析python3 依赖倒置原则(示例代码)
Jul 09 #Python
Python中Selenium对Cookie的操作方法
Python常用配置文件ini、json、yaml读写总结
图文详解matlab原始处理图像几何变换
Django中session进行权限管理的使用
python利用pandas分析学生期末成绩实例代码
使用pandas生成/读取csv文件的方法实例
You might like
玩家交还《星际争霸》原始码光盘 暴雪报以厚礼
2017/05/05 星际争霸
PHP 伪静态技术原理以及突破原理实现介绍
2013/07/12 PHP
PHP时间类完整实例(非常实用)
2015/12/25 PHP
CentOS下搭建PHP环境与WordPress博客程序的全流程总结
2016/05/07 PHP
Linux php 中文乱码的快速解决方法
2016/05/13 PHP
phpStudy2016 配置多个域名期间遇到的问题小结
2017/10/19 PHP
MacOS下PHP7.1升级到PHP7.4.15的方法
2021/02/22 PHP
php命令行模式代码实例详解
2021/02/26 PHP
Javascript面向对象之四 继承
2011/02/08 Javascript
JavaScript学习笔记(一) js基本语法
2011/10/25 Javascript
模拟电子签章盖章效果的jQuery插件源码
2013/06/24 Javascript
判断滚动条到底部的JS代码
2013/11/04 Javascript
angularJS 中$scope方法使用指南
2015/02/09 Javascript
使用bootstrap3开发响应式网站
2016/05/12 Javascript
Three.js学习之文字形状及自定义形状
2016/08/01 Javascript
Angular的自定义指令以及实例
2016/12/26 Javascript
javascript 删除数组元素和清空数组的简单方法
2017/02/24 Javascript
Angularjs分页查询的实现
2017/02/24 Javascript
jquery mobile实现可折叠的导航按钮
2017/03/11 Javascript
微信小程序微信支付接入开发实例详解
2017/04/12 Javascript
vue父子组件的嵌套的示例代码
2017/09/08 Javascript
Thinkjs3新手入门之添加一个新的页面
2017/12/06 Javascript
AngularJS发送异步Get/Post请求方法
2018/08/13 Javascript
解决vue 单文件组件中样式加载问题
2019/04/24 Javascript
原生js实现无缝轮播图
2020/01/11 Javascript
vue组件内部引入外部js文件的方法
2020/01/18 Javascript
vue实现简单瀑布流布局
2020/05/28 Javascript
Python实现全角半角转换的方法
2014/08/18 Python
Django将默认的SQLite更换为MySQL的实现
2019/11/18 Python
使用python turtle画高达
2020/01/19 Python
美国派对用品及装饰品网上商店:Shindigz
2016/07/30 全球购物
孕妇内衣和胸罩:Cake Maternity
2018/07/16 全球购物
会计专业毕业生求职信分享
2014/01/03 职场文书
教导主任个人总结
2015/03/03 职场文书
css display table 自适应高度、宽度问题的解决
2021/05/07 HTML / CSS
SpringDataJPA实体类关系映射配置方式
2021/12/06 Java/Android