В определенных сценариях становится необходимым вычислить хэш MD5 больших файлов, размер которых превышает доступную оперативную память. Собственная функция Python hashlib.md5() не подходит для таких сценариев, поскольку она требует загрузки всего файла в память.
Чтобы преодолеть это ограничение, практичным подходом является чтение файла управляемыми фрагментами и итеративно обновлять хэш. Это позволяет эффективно вычислять хеш-функции, не превышая ограничений памяти.
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()
Чтобы вычислить хэш MD5 файла, используйте следующий синтаксис:
with open(filename, 'rb') as f:
md5_hash = md5_for_file(f)
Переменная md5_hash будет содержать вычисленный хэш MD5 в виде байтового объекта.
Обязательно открывайте файл в двоичном формате mode ('rb'), чтобы избежать неверных результатов. Для комплексной обработки файлов рассмотрите следующую функцию:
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()
Эта функция принимает путь к файлу и возвращает хэш MD5 в виде шестнадцатеричной строки.
Используя эти методы, вы можете эффективно вычислять хэши MD5 для больших файлов, не встречая ограничения памяти.
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3