In bestimmten Szenarien ist es notwendig, den MD5-Hash großer Dateien zu berechnen, die den verfügbaren RAM überschreiten. Die native Python-Funktion hashlib.md5() ist für solche Szenarien nicht geeignet, da sie erfordert, dass die gesamte Datei in den Speicher geladen wird.
Um diese Einschränkung zu überwinden, besteht ein praktischer Ansatz darin, die Datei in überschaubaren Blöcken zu lesen und Aktualisieren Sie den Hash iterativ. Dies ermöglicht eine effiziente Hash-Berechnung, ohne die Speichergrenzen zu überschreiten.
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()
Um den MD5-Hash einer Datei zu berechnen, verwenden Sie die folgende Syntax:
with open(filename, 'rb') as f:
md5_hash = md5_for_file(f)
Die Variable md5_hash enthält den berechneten MD5-Hash als byteähnliches Objekt.
Stellen Sie sicher, dass Sie die Datei im Binärformat öffnen Modus ('rb'), um falsche Ergebnisse zu vermeiden. Für eine umfassende Dateiverarbeitung sollten Sie die folgende Funktion in Betracht ziehen:
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()
Diese Funktion verwendet einen Dateipfad und gibt den MD5-Hash als hexadezimale Zeichenfolge zurück.
Durch die Verwendung dieser Techniken können Sie MD5-Hashes für große Dateien effizient berechnen, ohne dass Probleme auftreten Speicherbeschränkungen.
Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.
Copyright© 2022 湘ICP备2022001581号-3