- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
documentation对于 python 库,Murmur 有点稀疏。
我一直在尝试改编来自 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()
中的公共(public)方法是:
'block_size',
'copy',
'digest',
'digest_size',
'hexdigest',
'name',
'update'
而 mmh3
有
'hash',
'hash64',
'hash_bytes'
没有update
或hexdigest
方法..
有谁知道如何实现类似的结果?
动机是尽快测试唯一性,结果 here表明杂音是一个很好的候选者。
更新 -
根据@Bakuriu 的评论,我查看了 mmh3这似乎有更好的记录。
里面的公共(public)方法有:
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 中,无法真正理解它。这是一个 link to the line
所以现在将只使用 CRC-32,它应该几乎与此目的一样好,它是 well documented how to do it .如果有人发布解决方案,将对其进行测试。
最佳答案
要使用 murmur 对文件进行哈希处理,必须将其完全加载到内存中并一次性对其进行哈希处理。
import mmh3
with open('main.py') as file:
data = file.read()
hash = mmh3.hash_bytes(data, 0xBEFFE)
print(hash.hex())
如果您的文件太大而无法放入内存,您可以使用增量/渐进式散列:将您的数据添加到多个 block 中并动态散列它们(如上面的示例)。
是否有用于 murmur 渐进式哈希的 Python 库?
我试图找到一个,但似乎没有。
murmur 是否可以实现渐进式哈希?
C 中有一个有效的实现:
关于python - 使用 Python 3 获取文件的杂音哈希,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52706164/
我是一名优秀的程序员,十分优秀!