我用过 hashlib (在 Python 2.6/3.0 中替换 md5 ),如果我打开一个文件并将其内容放入 hashlib.md5()
中,它工作正常。功能。
问题在于非常大的文件,它们的大小可能超过 RAM 大小。
如何在不将整个文件加载到内存的情况下获取文件的 MD5 哈希?
最佳答案
您需要以合适大小的 block 读取文件:
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()
注意:确保打开文件时使用“rb”打开 - 否则会得到错误的结果。
所以要用一种方法完成所有工作 - 使用类似的方法:
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()
以上更新基于 the comments provided by Frerich Raabe - 我对此进行了测试,发现它在我的 Python 2.7.2 Windows 安装中是正确的
我使用 jacksum 交叉检查了结果工具。
jacksum -a md5 <filename>
https://stackoverflow.com/questions/1131220/