Heim  >  Artikel  >  Backend-Entwicklung  >  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?

Barbara Streisand
Barbara StreisandOriginal
2024-10-20 11:06:30819Durchsuche

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:

<code class="python">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()</code>

Um den MD5-Hash einer großen Datei zu berechnen, können Sie die Funktion wie folgt aufrufen:

<code class="python">with open("filename", "rb") as f:
    md5 = md5_for_file(f)</code>

Hinweis im 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:

<code class="python">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()</code>

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

Das obige ist der detaillierte Inhalt vonWie kann ich große Dateien in Python ohne übermäßigen Speicherverbrauch hashen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn