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

Barbara Streisand
Lepaskan: 2024-10-20 11:06:30
asal
819 orang telah melayarinya

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>
Salin selepas log masuk

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>
Salin selepas log masuk

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>
Salin selepas log masuk

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!

sumber:php
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!