关于文件的计算哈希的堆栈溢出问题,有一些很好的讨论,包括使用Python(1,2,{{ 3}})。他们最终得到了如下所示的解决方案(从#3进行了轻轻编辑):
def md5_file(path, size):
m = hashlib.md5()
with open(path, 'rb') as f:
b = f.read(size)
while len(b) > 0:
m.update(b)
b = f.read(size)
return m.digest()
如果您不需要哈希函数在密码上是安全的(我不需要),那么可以使用3(似乎也称为pyhash),如pyfasthash所述。不幸的是,pyfasthash的哈希类缺少上面使用的update
方法。我没有太多运气想出其他办法。 Python-C混合代码超出了我。我只是像这样将整个文件读入内存:
with open(path, 'rb') as afile:
return hasher(afile.read())
这种方法的缺点是:
有什么方法可以更快地计算文件的哈希值?