Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk Hash Fail Besar dalam Python tanpa Penggunaan Memori yang Berlebihan?

Bagaimana untuk Hash Fail Besar dalam Python tanpa Penggunaan Memori yang Berlebihan?

Barbara Streisand
Barbara Streisandasal
2024-10-20 11:06:30823semak imbas

How to Hash Large Files in Python without Memory Overconsumption?

Mengkomputerkan Cincang MD5 untuk Fail Besar dalam Python

Modul hashlib Python menyediakan antara muka yang mudah untuk mengira cincang kriptografi. Walau bagaimanapun, untuk fail yang sangat besar yang saiznya melebihi memori sistem, menggunakan hashlib secara langsung boleh menjadi masalah.

Penyelesaian: Pencapaian Progresif

Untuk menangani isu ini, kami menggunakan pencincangan progresif dengan membaca fail dalam ketulan yang boleh diurus. Pendekatan ini memastikan bahawa keseluruhan kandungan fail dicincang tanpa menggunakan memori yang berlebihan. Berikut ialah contoh fungsi Python yang melaksanakan teknik ini:

<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>

Untuk mengira cincangan MD5 bagi fail besar, anda boleh menggunakan fungsi seperti berikut:

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

Nota pada Mod Fail

Pastikan anda membuka fail dalam mod binari dengan "rb" untuk hasil yang tepat. Menggunakan "r" boleh membawa kepada pengiraan yang salah.

Pertimbangan Tambahan

Untuk kemudahan, versi fungsi yang dipertingkatkan dibentangkan di bawah:

<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>

Menyemak silang cincang yang dikira dengan alat luaran seperti jacksum disyorkan untuk mengesahkan ketepatan.

Atas ialah kandungan terperinci Bagaimana untuk Hash Fail Besar dalam Python tanpa Penggunaan Memori yang Berlebihan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn