为了账号安全,请及时绑定邮箱和手机立即绑定

在Python中获取大文件的MD5哈希值

在Python中获取大文件的MD5哈希值

跃然一笑 2019-07-31 15:35:44
在Python中获取大文件的MD5哈希值我使用了hashlib(它取代了Python 2.6 / 3.0中的md5),如果我打开一个文件并将其内容放入hashlib.md5()函数中,它工作正常。问题在于非常大的文件,它们的大小可能超过RAM大小。如何在不将整个文件加载到内存的情况下获取文件的MD5哈希值?
查看完整描述

3 回答

?
红颜莎娜

TA贡献1842条经验 获得超12个赞

将文件分成128个字节的块并连续使用它们将它们送到MD5 update()

这利用了MD5具有128字节摘要块的事实。基本上,当MD5 digest()是文件时,这正是它正在做的事情。

如果确保在每次迭代时释放内存(即不将整个文件读取到内存中),则该内存不应超过128个字节。

一个例子是像这样读取块:

f = open(fileName)while not endOfFile:
    f.read(128)


查看完整回答
反对 回复 2019-07-31
?
慕娘9325324

TA贡献1783条经验 获得超4个赞

如果您关心更多pythonic(没有'while True')阅读文件的方式,请检查以下代码:

import hashlibdef checksum_md5(filename):
    md5 = hashlib.md5()
    with open(filename,'rb') as f: 
        for chunk in iter(lambda: f.read(8192), b''): 
            md5.update(chunk)
    return md5.digest()

请注意,iter()func需要一个空的字节字符串,以便返回的迭代器在EOF处停止,因为read()返回b''(不仅仅是'')。


查看完整回答
反对 回复 2019-07-31
  • 3 回答
  • 0 关注
  • 2150 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信