3

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 を使用します。誰かが解決策を投稿した場合、それをテストします。

4

1 に答える 1