Python的hashlib库获取超大文件的md5值实例探究

 更新时间:2024年01月23日 11:15:33   作者:weibin python学习与大数据分析  
这篇文章主要为大家介绍了Python的hashlib库获取超大文件的md5值实现示例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

Python hashlib获取文件md5值

不知道大家在工作中有没有涉及到超大文件的读取,在处理超大文件时,如果直接将整个文件读到内存,然后再计算MD5值可能会占用大量内存,严重的情况下可能会导致系统故障。

为了减轻系统内存压力,我们通常采取分块读取文件内容的方式来计算MD5。

Python的hashlib库,它支持将大文件分块读取并计算MD5值,从而避免一次性加载整个文件到内存中。

import hashlib
import os
def get_file_md5(file_path, block_size=2 ** 20):  # 默认块大小为1MB
    md5_hash = hashlib.md5()
    with open(file_path, "rb") as f:
        while True:
            data = f.read(block_size)
            if not data:
                break
            md5_hash.update(data)
    return md5_hash.hexdigest()
# 使用方法
file_path_large_file = r"E:\xxxxxxx\Win10_64位专业版本.ISO"
md5_value = get_file_md5(file_path_large_file)
print(f"大文件的大小是:{os.path.getsize(file_path_large_file)/1024/1024/1024:.2f}GB")
print(f"大文件的MD5值是:{md5_value}") 

测试5.42G操作系统文件

我自己找了一个5.42G操作系统文件来测试了下,运行过程计算机内存的使用率并没有明显增加,表现很平稳。

内存利用率变化

可能大家看到这里不能明显感受到分块读取文件和一次性将大文件读入内存的差异,我下面的函数去掉了分块读取的设置,我们再来看下内存利用率的变化

def get_file_md52(file_path):  # 这里去掉了块大小的设置
    md5_hash = hashlib.md5()
    with open(file_path, "rb") as f:
        while True:
            data = f.read()  # 这里是一次性将文件读入内存
            if not data:
                break
            md5_hash.update(data)
    return md5_hash.hexdigest()
# 使用方法
file_path_large_file = r"E:\xxxxxx\Win10_64位专业版本.ISO"
md5_value = get_file_md52(file_path_large_file)
print(f"大文件的大小是:{os.path.getsize(file_path_large_file)/1024/1024/1024:.2f}GB")
print(f"大文件的MD5值是:{md5_value}")

通过上面的内存利用率截图,我们可以看到如果不设置分块读取,内存利用率会明显升高,在工作中这种操作会存在较大风险,所以,各位同学应该尽量避免这种操作方式。

当然了,分块读取超大文件的操作,不仅适用于计算md5值,同样可以用在其他读取文件内容的场景。希望各位同学可以灵活使用。

以上就是Python的hashlib库获取超大文件的md5值实例探究的详细内容,更多关于Python hashlib获取文件md5值的资料请关注脚本之家其它相关文章!

相关文章

  • python+splinter自动刷新抢票功能

    python+splinter自动刷新抢票功能

    这篇文章主要为大家详细介绍了python+splinter自动刷新抢票功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-09-09
  • 使用Numpy打乱数组或打乱矩阵行

    使用Numpy打乱数组或打乱矩阵行

    这篇文章主要介绍了使用Numpy打乱数组或打乱矩阵行问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-05-05
  • 在Python的Django框架中实现Hacker News的一些功能

    在Python的Django框架中实现Hacker News的一些功能

    这篇文章主要介绍了在Python的Django框架中实现Hacker News的一些功能,包括投票“顶”评论等功能,需要的朋友可以参考下
    2015-04-04
  • 关于python中remove的一些坑小结

    关于python中remove的一些坑小结

    这篇文章主要给大家介绍了关于python中remove的一些坑,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-01-01
  • Python办公自动化SFTP详解

    Python办公自动化SFTP详解

    这篇文章主要介绍了Python办公自动化SFTP详解,sftp和ftp的区别在安全通道,使用的协议,链接方式,安全性等方面都有不同,更多相关内容需要的小伙伴可以参考一下
    2022-08-08
  • 探索Python Furl高性能URL构建解析和操作功能实例

    探索Python Furl高性能URL构建解析和操作功能实例

    本文将提供关于Python Furl的全面指南,包括安装和配置、基本概念、URL解析、URL构建、查询参数操作、片段处理、实际应用场景以及丰富的示例代码
    2024-01-01
  • 详解Python 数据库 (sqlite3)应用

    详解Python 数据库 (sqlite3)应用

    本篇文章主要介绍了Python标准库14 数据库 (sqlite3),小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧。
    2016-12-12
  • Python实现暴力破解wifi密码并打包成exe

    Python实现暴力破解wifi密码并打包成exe

    python号称是编程界的万金油,那么是否可以做个读取电脑网卡wifi并暴力破解的小脚本呢?在这个基础上为了方便体验是不是可以将其打包成exe这样方便执行的小应用呢?本文就来和大家一起聊聊
    2022-09-09
  • 在Python中处理XML的教程

    在Python中处理XML的教程

    这篇文章主要介绍了在Python中处理XML的教程,是Python网络编程中的基础知识,需要的朋友可以参考下
    2015-04-04
  • conda创建环境过程出现"Solving environment: failed"报错的详细解决方法

    conda创建环境过程出现"Solving environment: failed"报错的详细解

    很长一段时间没用conda了,然后突然使用conda创建环境报错,所以下面这篇文章主要给大家介绍了关于conda创建环境过程出现"Solving environment: failed"报错的详细解决方法,需要的朋友可以参考下
    2022-11-11

最新评论