首页  >  文章  >  后端开发  >  如何在Python中计算大文件的MD5哈希值而不导致内存过载?

如何在Python中计算大文件的MD5哈希值而不导致内存过载?

Linda Hamilton
Linda Hamilton原创
2024-10-20 10:13:30668浏览

How to Calculate MD5 Hashes for Large Files in Python without Memory Overloading?

在 Python 中计算大文件的 MD5 哈希值

简介

确定以下文件的 MD5 哈希值当大文件的大小超过可用内存时,它们可能会带来挑战。本文提出了一种实用的解决方案,无需将整个文件加载到内存中即可计算 MD5 哈希值。

解决方案

要计算大文件的 MD5 哈希值,必须阅读将它们分成可管理的块。以下代码片段演示了这一点:

<code class="python">def md5_for_file(f, block_size=2**20):
    md5 = hashlib.md5()
    while True:
        data = f.read(block_size)
        if not data:
            break
        md5.update(data)
    return md5.digest()</code>

通过指定合适的块大小,此函数以块的形式读取文件,并不断更新每个块的 MD5 哈希值。

增强代码

要简化该过程,请考虑以下增强代码:

<code class="python">def generate_file_md5(rootdir, filename, blocksize=2**20):
    m = hashlib.md5()
    with open(os.path.join(rootdir, filename), "rb") as f:
        while True:
            buf = f.read(blocksize)
            if not buf:
                break
            m.update(buf)
    return m.hexdigest()</code>

这里,文件以二进制模式(“rb”)打开以正确处理二进制数据。然后该函数迭代文件,更新哈希值,并返回最终哈希值的十六进制表示形式。

交叉检查结果

为了确保准确性,请考虑交叉- 使用“jacksum”等专用工具检查结果:

jacksum -a md5 <filename>

这将提供独立的 MD5 哈希计算以供比较。

以上是如何在Python中计算大文件的MD5哈希值而不导致内存过载?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn