En ciertos escenarios, se hace necesario calcular el hash MD5 de archivos grandes que exceden la RAM disponible. La función nativa de Python hashlib.md5() no es adecuada para tales escenarios ya que requiere que todo el archivo se cargue en la memoria.
Para superar esta limitación, un enfoque práctico es leer el archivo en fragmentos manejables y actualice iterativamente el hash. Esto permite un cálculo hash eficiente sin exceder los límites de memoria.
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, use la siguiente sintaxis:
with open(filename, 'rb') as f:
md5_hash = md5_for_file(f)
La variable md5_hash contendrá el hash MD5 calculado como un objeto similar a bytes.
Asegúrese de abrir el archivo en binario mode ('rb') para evitar resultados incorrectos. Para un procesamiento completo de archivos, considere la siguiente función:
import os
import hashlib
def generate_file_md5(rootdir, filename, blocksize=2**20):
m = hashlib.md5()
with open(os.path.join(rootdir, filename), 'rb') as f:
while True:
buf = f.read(blocksize)
if not buf:
break
m.update(buf)
return m.hexdigest()
Esta función toma una ruta de archivo y devuelve el hash MD5 como una cadena hexadecimal.
Al utilizar estas técnicas, puede calcular eficientemente hashes MD5 para archivos grandes sin encontrar limitaciones de memoria.
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