在某些场景下,需要计算超出可用RAM的大文件的MD5哈希值。原生 Python 函数 hashlib.md5() 不适合这种情况,因为它需要将整个文件加载到内存中。
要克服此限制,一种实用的方法是以可管理的块读取文件,并迭代更新哈希值。这允许高效的哈希计算而不超出内存限制。
import hashlib
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()
要计算文件的 MD5 哈希值,请使用以下语法:
with open(filename, 'rb') as f:
md5_hash = md5_for_file(f)
md5_hash 变量将包含计算出的 MD5 哈希值作为类似字节的对象。
确保以二进制方式打开文件mode ('rb') 以避免错误结果。对于全面的文件处理,请考虑以下功能:
import os
import hashlib
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()
此函数采用文件路径并以十六进制字符串形式返回 MD5 哈希值。
通过利用这些技术,您可以有效地计算大文件的 MD5 哈希值,而不会遇到内存限制。
免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。
Copyright© 2022 湘ICP备2022001581号-3