Документация для библиотеки 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']
.. так что нет метода "update".Я посмотрел исходный код для mmh3.hash_from_buffer
, но он не выглядит так, как будто он содержит цикл, и он тоже не в Python, на самом деле не может следовать ему.Вот ссылка на строку
Так что пока просто используйте CRC-32, который должен быть почти таким же хорошим для этой цели, и это хорошо документировано, каксделай это .Если кто-нибудь опубликует решение, его протестируют.