python 库 Murmur的文档有点稀疏。
我一直在尝试从这个答案中调整代码:
import hashlib
from functools import partial
def md5sum(filename):
with open(filename, mode='rb') as f:
d = hashlib.md5()
for buf in iter(partial(f.read, 128), b''):
d.update(buf)
return d.hexdigest()
print(md5sum('utils.py'))
根据我在答案中读到的内容,md5 不能一次对整个文件进行操作,所以它需要这个循环。但是,不确定在线上会发生什么d.update(buf)
。
中的公共方法hashlib.md5()
是:
'block_size',
'copy',
'digest',
'digest_size',
'hexdigest',
'name',
'update'
而mmh3
有
'hash',
'hash64',
'hash_bytes'
没有update
或hexdigest
方法..
有谁知道如何达到类似的结果?
动机是尽可能快地测试唯一性,这里的结果表明杂音是一个很好的候选者。
更新 -
根据@Bakuriu 的评论,我查看了mmh3似乎有更好的文档记录。
它里面的公共方法是:
import mmh3
print([x for x in dir(mmh3) if x[0]!='_'])
>>> ['hash', 'hash128', 'hash64', 'hash_bytes', 'hash_from_buffer']
..所以没有“更新”方法。我查看了源代码,mmh3.hash_from_buffer
但它看起来不像包含循环,而且它也不在 Python 中,无法真正遵循它。这是该行的链接
因此,现在只使用 CRC-32,它应该几乎与此目的一样好,并且有据可查如何做到这一点。如果有人发布解决方案,将对其进行测试。