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中合并两个文本文件并按照姓名首字母排序的例子
Apr 25 Python
Python获取DLL和EXE文件版本号的方法
Mar 10 Python
python循环监控远程端口的方法
Mar 14 Python
讲解Python中运算符使用时的优先级
May 14 Python
使用Python读写及压缩和解压缩文件的示例
Jul 08 Python
Python中str.join()简单用法示例
Mar 20 Python
python实现Dijkstra静态寻路算法
Jan 17 Python
pandas去重复行并分类汇总的实现方法
Jan 29 Python
python 实现在无序数组中找到中位数方法
Mar 03 Python
pandas使用函数批量处理数据(map、apply、applymap)
Nov 27 Python
如何使用Python进行PDF图片识别OCR
Jan 22 Python
Python中常见的反爬机制及其破解方法总结
Jun 10 Python
深入浅析python3 依赖倒置原则(示例代码)
Jul 09 #Python
Python中Selenium对Cookie的操作方法
Python常用配置文件ini、json、yaml读写总结
图文详解matlab原始处理图像几何变换
Django中session进行权限管理的使用
python利用pandas分析学生期末成绩实例代码
使用pandas生成/读取csv文件的方法实例
You might like
一些被忽视的PHP函数(简单整理)
2010/04/30 PHP
php array_map()数组函数使用说明
2011/07/12 PHP
PHP删除数组中的特定元素的代码
2012/06/28 PHP
基于flush()不能按顺序输出时的解决办法
2013/06/29 PHP
php中session退出登陆问题
2014/02/27 PHP
php 邮件发送问题解决
2014/03/22 PHP
CI框架整合widget(页面格局)的方法
2016/05/17 PHP
jquery插件 autoComboBox 下拉框
2010/12/22 Javascript
javascript实现焦点滚动图效果 具体方法
2013/06/24 Javascript
JQuery判断radio(单选框)是否选中和获取选中值方法总结
2015/04/15 Javascript
jQuery图片旋转插件jQueryRotate.js用法实例(附demo下载)
2016/01/21 Javascript
JS实现图片的不间断连续滚动的简单实例
2016/06/03 Javascript
Node.js DES加密的简单实现
2016/07/07 Javascript
Bootstrap 下拉多选框插件Bootstrap Multiselect
2017/01/22 Javascript
vue--点击当前增加class,其他删除class的方法
2018/09/15 Javascript
vue 巧用过渡效果(小结)
2018/09/22 Javascript
Element input树型下拉框的实现代码
2018/12/21 Javascript
利用JavaScript将Excel转换为JSON示例代码
2019/06/14 Javascript
layer父页获取弹出层输入框里面的值方法
2019/09/02 Javascript
微信小程序页面滚动到指定位置代码实例
2019/09/07 Javascript
JS实现电脑虚拟键盘打字测试
2020/06/24 Javascript
一篇文章看懂JavaScript中的回调
2021/01/05 Javascript
Python中MYSQLdb出现乱码的解决方法
2014/10/11 Python
python的构建工具setup.py的方法使用示例
2017/10/23 Python
解决python selenium3启动不了firefox的问题
2018/10/13 Python
Python中如何将一个类方法变为多个方法
2019/12/30 Python
Pycharm安装并配置jupyter notebook的实现
2020/05/18 Python
如何通过命令行进入python
2020/07/06 Python
详解torch.Tensor的4种乘法
2020/09/03 Python
Python数据可视化常用4大绘图库原理详解
2020/10/23 Python
python 写一个水果忍者游戏
2021/01/13 Python
采用冷却技术的超自然舒适度:GhostBed床垫
2018/09/18 全球购物
小学美术兴趣小组活动总结
2014/07/07 职场文书
向国旗敬礼活动总结范文2014
2014/09/27 职场文书
学校三八妇女节活动总结
2015/02/06 职场文书
CSS3中Animation实现简单的手指点击动画的示例
2021/07/15 HTML / CSS