在 Python 中计算大文件的 MD5 哈希值
当处理非常大的文件时,使用 hashlib 库计算 MD5 哈希值的传统方法变得不切实际,因为它们需要将整个文件加载到内存中。这种方法可能会耗尽系统资源,导致错误和速度变慢。
解决方案:分块哈希
为了解决这个问题,可以采用一种称为分块哈希的技术来计算MD5 增量散列,无需将整个文件加载到内存中。这涉及到:
代码实现:
以下 Python 函数 md5_for_file() 实现分块散列:
<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>
要使用此功能,请确保以二进制模式(rb)打开文件。
完整方法:
为了方便,这是一个完整的方法generate_file_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>
此方法以字符串形式返回指定文件的十六进制编码的 MD5 哈希。您可以使用 jacksum 等外部工具来验证结果进行比较。
以上是如何在Python中高效计算大文件的MD5哈希?的详细内容。更多信息请关注PHP中文网其他相关文章!