特定のシナリオでは、使用可能な RAM を超える大きなファイルの MD5 ハッシュを計算する必要があります。ネイティブ Python 関数 hashlib.md5() は、ファイル全体をメモリにロードする必要があるため、このようなシナリオには適していません。
この制限を克服するには、ファイルを管理可能なチャンクに分けて読み取り、ハッシュを繰り返し更新します。これにより、メモリ制限を超えることなく効率的なハッシュ計算が可能になります。
import hashlib
def md5_for_file(f, block_size=2**20):
md5 = hashlib.md5()
while True:
data = f.read(block_size)
if not data:
break
md5.update(data)
return md5.digest()
ファイルの MD5 ハッシュを計算するには、次の構文を使用します。
with open(filename, 'rb') as f:
md5_hash = md5_for_file(f)
md5_hash 変数には、計算された MD5 ハッシュがバイトのようなオブジェクトとして含まれます。
必ずファイルをバイナリで開いてください。モード ('rb') を使用して、不正確な結果を回避します。包括的なファイル処理については、次の関数を検討してください:
import os
import hashlib
def generate_file_md5(rootdir, filename, blocksize=2**20):
m = hashlib.md5()
with open(os.path.join(rootdir, filename), 'rb') as f:
while True:
buf = f.read(blocksize)
if not buf:
break
m.update(buf)
return m.hexdigest()
この関数はファイル パスを取得し、MD5 ハッシュを 16 進数の文字列として返します。
これらの手法を利用すると、大きなファイルの MD5 ハッシュを、問題が発生することなく効率的に計算できます。メモリ制限
免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。
Copyright© 2022 湘ICP备2022001581号-3