1. ホーム
  2. python

[解決済み】Pythonで大きなファイルのMD5ハッシュを取得する

2022-04-13 21:28:16

質問

Python 2.6/3.0ではmd5の代わりにhashlibを使用しており、ファイルを開いてその中身を hashlib.md5() 関数を使用します。

問題は、非常に大きなファイルの場合、そのサイズがRAMサイズを超える可能性があることです。

ファイル全体をメモリに読み込むことなく、ファイルのMD5ハッシュを取得するには?

どのように解決するのですか?

ファイルを8192バイト(または128バイトの倍数)のチャンクに分割し、それらを連続してMD5に送り込むには update() .

これは、MD5が128バイトのダイジェストブロックを持つことを利用しています(8192は128×64)。ファイル全体をメモリに読み込むわけではないので、8192バイト以上のメモリを使用することはありません。

Python 3.8+では、次のようなことができます。

import hashlib
with open("your_filename.txt", "rb") as f:
    file_hash = hashlib.md5()
    while chunk := f.read(8192):
        file_hash.update(chunk)
print(file_hash.digest())
print(file_hash.hexdigest())  # to get a printable str instead of bytes