получить ропот хеш файла с Python 3 - PullRequest
0 голосов
/ 08 октября 2018

Документация для библиотеки 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, который должен быть почти таким же хорошим для этой цели, и это хорошо документировано, каксделай это .Если кто-нибудь опубликует решение, его протестируют.

...