Python库Murmur的documentation有点稀疏。
我一直在尝试改编this答案中的代码:
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
方法。
有人知道如何获得类似的结果吗?
动机是尽快测试唯一性,结果here表明杂音是不错的选择。
更新-
在@Bakuriu的评论之后,我看了一下mmh3,它似乎记录得更好。
其中的公共方法是:
import mmh3
print([x for x in dir(mmh3) if x[0]!='_'])
>>> ['hash', 'hash128', 'hash64', 'hash_bytes', 'hash_from_buffer']
.. so没有“更新”方法。我看了mmh3.hash_from_buffer
的源代码,但它看起来不像包含一个循环,并且也不在Python中,因此无法真正遵循它。这是link to the line
因此,目前仅使用CRC-32,它应该是达到目的的,它是well documented how to do it。如果有人发布了解决方案,则会对其进行测试。
答案 0 :(得分:0)
要使用 murmur 对文件进行哈希处理,必须将其完全加载到内存中并一次性进行哈希处理。
import mmh3
with open('main.py') as file:
data = file.read()
hash = mmh3.hash_bytes(data, 0xBEFFE)
print(hash.hex())
如果您的文件太大而无法放入内存,您可以使用增量/渐进散列:将您的数据添加到多个块中并动态散列它们(如上面的示例)。
是否有用于使用 murmur 进行渐进式散列的 Python 库?
我试图找到一个,但似乎没有。
通过 murmur 是否可以进行渐进式散列?
在 C 中有一个工作实现: