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 11 Python
在Python的Flask框架中实现全文搜索功能
Apr 20 Python
python统计文本字符串里单词出现频率的方法
May 26 Python
机器学习10大经典算法详解
Dec 07 Python
数组保存为txt, npy, csv 文件, 数组遍历enumerate的方法
Jul 09 Python
django 自定义filter 判断if var in list的例子
Aug 20 Python
TensorFlow实现保存训练模型为pd文件并恢复
Feb 06 Python
Python Tricks 使用 pywinrm 远程控制 Windows 主机的方法
Jul 21 Python
python 如何引入协程和原理分析
Nov 30 Python
利用python如何实现猫捉老鼠小游戏
Dec 04 Python
使用pycharm运行flask应用程序的详细教程
Jun 07 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
解决中英文字符串长度问题函数
2007/01/16 PHP
第七章 php自定义函数实现代码
2011/12/30 PHP
php下载文件源代码(强制任意文件格式下载)
2014/05/09 PHP
PHP小技巧之JS和CSS优化工具Minify的使用方法
2014/05/19 PHP
ExtJs事件机制基本代码模型和流程解析
2010/10/24 Javascript
各情景下元素宽高的获取实现代码
2011/09/13 Javascript
JS实现一键回顶功能示例代码
2013/10/28 Javascript
JS中实现replaceAll的方法(实例代码)
2013/11/12 Javascript
在Ubuntu系统上安装Ghost博客平台的教程
2015/06/17 Javascript
jQuery EasyUI Pagination实现分页的常用方法
2016/05/21 Javascript
sencha ext js 6 快速入门(必看)
2016/06/01 Javascript
jQuery遍历json的方法(推荐)
2016/06/12 Javascript
jQuery新窗口打开外链接
2016/07/21 Javascript
jQuery实现的超链接提示效果示例【附demo源码下载】
2016/09/09 Javascript
JavaScript面试题(指针、帽子和女朋友)
2016/11/23 Javascript
详解如何使用 vue-cli 开发多页应用
2017/12/16 Javascript
Vue中render方法的使用详解
2018/01/26 Javascript
Typescript的三种运行方式(小结)
2019/09/18 Javascript
JavaScript实现单图片上传并预览功能
2019/09/30 Javascript
element的el-table中记录滚动条位置的示例代码
2019/11/06 Javascript
js回调函数原理与用法案例分析
2020/03/04 Javascript
让IDE识别webpack的别名alias的实现方法
2020/05/06 Javascript
js实现炫酷光感效果
2020/09/05 Javascript
[04:48]DOTA2上海特锦赛小组赛第三日 TOP10精彩集锦
2016/02/28 DOTA
[03:59]第二届DOTA2亚洲邀请赛选手传记-VGJ.rOtk
2017/04/03 DOTA
python列表返回重复数据的下标
2020/02/10 Python
2020新版本pycharm+anaconda+opencv+pyqt环境配置学习笔记,亲测可用
2020/03/24 Python
一文弄懂Pytorch的DataLoader, DataSet, Sampler之间的关系
2020/07/03 Python
美国高端寝具品牌:Coyuchi
2017/02/08 全球购物
工程造价专业大学生自荐信
2013/10/01 职场文书
计算机网络专业推荐信
2013/11/24 职场文书
创业大赛策划书
2014/03/01 职场文书
中学生学习保证书
2015/02/26 职场文书
小学运动会加油词
2015/07/18 职场文书
高一语文教学反思
2016/02/16 职场文书
Python实现归一化算法详情
2022/03/18 Python