Em certos cenários, torna-se necessário calcular o hash MD5 de arquivos grandes que excedem a RAM disponível. A função nativa do Python hashlib.md5() não é adequada para tais cenários, pois requer que o arquivo inteiro seja carregado na memória.
Para superar essa limitação, uma abordagem prática é ler o arquivo em partes gerenciáveis e atualize iterativamente o hash. Isso permite o cálculo eficiente de hash sem exceder os limites de memória.
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 o hash MD5 de um arquivo, use a seguinte sintaxe:
with open(filename, 'rb') as f:
md5_hash = md5_for_file(f)
A variável md5_hash conterá o hash MD5 computado como um objeto semelhante a bytes.
Certifique-se de abrir o arquivo em binário mode ('rb') para evitar resultados incorretos. Para um processamento abrangente de arquivos, considere a seguinte função:
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 função pega um caminho de arquivo e retorna o hash MD5 como uma string hexadecimal.
Ao utilizar essas técnicas, você pode calcular hashes MD5 com eficiência para arquivos grandes sem encontrar limitações de memória.
Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.
Copyright© 2022 湘ICP备2022001581号-3