„Wenn ein Arbeiter seine Arbeit gut machen will, muss er zuerst seine Werkzeuge schärfen.“ – Konfuzius, „Die Gespräche des Konfuzius. Lu Linggong“
Titelseite > Programmierung > Wie kann ich große Dateien in Python ohne übermäßigen Speicherverbrauch hashen?

Wie kann ich große Dateien in Python ohne übermäßigen Speicherverbrauch hashen?

Veröffentlicht am 06.11.2024
Durchsuche:969

How to Hash Large Files in Python without Memory Overconsumption?

Berechnen von MD5-Hashes für große Dateien in Python

Das Hashlib-Modul von Python bietet eine praktische Schnittstelle zum Berechnen kryptografischer Hashes. Bei außergewöhnlich großen Dateien, deren Größe den Systemspeicher überschreitet, kann die direkte Verwendung von Hashlib jedoch problematisch sein.

Lösung: Progressives Hashing

Um dieses Problem zu beheben, verwenden wir progressives Hashing indem die Datei in überschaubaren Blöcken gelesen wird. Dieser Ansatz stellt sicher, dass der gesamte Dateiinhalt gehasht wird, ohne übermäßig viel Speicher zu verbrauchen. Hier ist eine Beispiel-Python-Funktion, die diese Technik implementiert:

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 großen Datei zu berechnen, können Sie die Funktion wie folgt aufrufen:

with open("filename", "rb") as f:
    md5 = md5_for_file(f)

Hinweis zum Dateimodus

Stellen Sie sicher, dass Sie die Datei im Binärmodus mit „rb“ öffnen, um genaue Ergebnisse zu erhalten. Die Verwendung von „r“ kann zu falschen Berechnungen führen.

Zusätzliche Überlegungen

Der Einfachheit halber wird unten eine verbesserte Version der Funktion vorgestellt:

import hashlib
import os

def generate_file_md5(rootdir, filename):
    m = hashlib.md5()
    with open(os.path.join(rootdir, filename), "rb") as f:
        buf = f.read()
        while buf:
            m.update(buf)
            buf = f.read()
    return m.hexdigest()

Es wird empfohlen, die berechneten Hashes mit externen Tools wie Jacksum zu vergleichen, um die Genauigkeit zu überprüfen.

Freigabeerklärung Dieser Artikel wird unter folgender Adresse abgedruckt: 1729388119 Bei Verstößen wenden Sie sich bitte an [email protected], um ihn zu löschen
Neuestes Tutorial Mehr>

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