"Si un trabajador quiere hacer bien su trabajo, primero debe afilar sus herramientas." - Confucio, "Las Analectas de Confucio. Lu Linggong"
Página delantera > Programación > ¿Cómo codificar archivos grandes en Python sin un consumo excesivo de memoria?

¿Cómo codificar archivos grandes en Python sin un consumo excesivo de memoria?

Publicado el 2024-11-06
Navegar:172

How to Hash Large Files in Python without Memory Overconsumption?

Cálculo de hashes MD5 para archivos grandes en Python

El módulo hashlib de Python proporciona una interfaz conveniente para calcular hashes criptográficos. Sin embargo, para archivos excepcionalmente grandes cuyo tamaño excede la memoria del sistema, usar hashlib directamente puede ser problemático.

Solución: hash progresivo

Para abordar este problema, empleamos hashing progresivo leyendo el archivo en fragmentos manejables. Este enfoque garantiza que todo el contenido del archivo esté codificado sin consumir demasiada memoria. Aquí hay una función de Python de muestra que implementa esta técnica:

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

Para calcular el hash MD5 de un archivo grande, puede invocar la función de la siguiente manera:

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

Nota sobre el modo de archivo

Asegúrese de abrir el archivo en modo binario con "rb" para obtener resultados precisos. El uso de "r" puede generar cálculos incorrectos.

Consideraciones adicionales

Para mayor comodidad, a continuación se presenta una versión mejorada de la función:

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

Se recomienda realizar una verificación cruzada de los hashes calculados con herramientas externas como jacksum para verificar la precisión.

Declaración de liberación Este artículo se reimprime en: 1729388119 Si hay alguna infracción, comuníquese con [email protected] para eliminarla.
Último tutorial Más>

Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.

Copyright© 2022 湘ICP备2022001581号-3