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中使用strip()方法删除字符串中空格的教程
May 20 Python
Python定时执行之Timer用法示例
May 27 Python
Python实现控制台进度条功能
Jan 04 Python
Python字典及字典基本操作方法详解
Jan 30 Python
解决PyCharm import torch包失败的问题
Oct 13 Python
Python面向对象之类和对象实例详解
Dec 10 Python
pyinstaller打包单个exe后无法执行错误的解决方法
Jun 21 Python
Django框架视图介绍与使用详解
Jul 18 Python
python实现简单飞行棋
Feb 06 Python
Python模块相关知识点小结
Mar 09 Python
你应该知道的Python3.6、3.7、3.8新特性小结
May 12 Python
Python机器学习实战之k-近邻算法的实现
Nov 27 Python
深入浅析python3 依赖倒置原则(示例代码)
Jul 09 #Python
Python中Selenium对Cookie的操作方法
Python常用配置文件ini、json、yaml读写总结
图文详解matlab原始处理图像几何变换
Django中session进行权限管理的使用
python利用pandas分析学生期末成绩实例代码
使用pandas生成/读取csv文件的方法实例
You might like
php 图片加水印与上传图片加水印php类
2010/05/12 PHP
PHP 数组排序方法总结 推荐收藏
2010/06/30 PHP
php防止sql注入之过滤分页参数实例
2014/11/03 PHP
Laravel框架文件上传功能实现方法示例
2019/04/16 PHP
关于js获取radio和select的属性并控制的代码
2011/05/12 Javascript
JS判断当前日期是否大于某个日期的实现代码
2012/09/02 Javascript
jquery 选取方法都有哪些
2014/05/18 Javascript
JavaScript fontcolor方法入门实例(按照指定的颜色来显示字符串)
2014/10/17 Javascript
javascript每日必学之多态
2016/02/23 Javascript
利用JavaScript判断浏览器类型及版本
2016/08/23 Javascript
微信小程序开发之好友列表字母列表跳转对应位置
2017/09/26 Javascript
实例详解vue.js浅度监听和深度监听及watch用法
2018/08/16 Javascript
vue中使用带隐藏文本信息的图片、图片水印的方法
2020/04/24 Javascript
vue父子组件间引用之$parent、$children
2020/05/20 Javascript
详解在IDEA中将Echarts引入web两种方式(使用js文件和maven的依赖导入)
2020/07/11 Javascript
Python读写Redis数据库操作示例
2014/03/18 Python
浅谈Python使用Bottle来提供一个简单的web服务
2017/12/27 Python
Windows 64位下python3安装nltk模块
2018/09/19 Python
在Mac上删除自己安装的Python方法
2018/10/29 Python
Python后台开发Django会话控制的实现
2019/04/15 Python
一步步教你用python的scrapy编写一个爬虫
2019/04/17 Python
Tornado实现多进程/多线程的HTTP服务详解
2019/07/25 Python
python统计文章中单词出现次数实例
2020/02/27 Python
纯css3使用vw和vh实现自适应的方法
2018/02/09 HTML / CSS
html5/css3响应式页面开发总结
2018/10/16 HTML / CSS
HTML5 Web存储方式的localStorage和sessionStorage进行数据本地存储案例应用
2012/12/09 HTML / CSS
使用phonegap克隆和删除联系人的实现方法
2017/03/31 HTML / CSS
PHP中如何创建和修改数组
2012/05/02 面试题
Java里面StringBuilder和StringBuffer有什么区别
2016/06/06 面试题
网络编辑岗位职责
2014/03/18 职场文书
产品委托授权书范本
2014/09/16 职场文书
2014向国旗敬礼网上签名活动总结
2014/09/27 职场文书
介绍信模板
2015/01/31 职场文书
党校学习个人总结
2015/02/15 职场文书
求职信:求职应该注意的问题
2019/04/24 职场文书
React Native项目框架搭建的一些心得体会
2021/05/28 Javascript