«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Как хешировать большие файлы в Python без перерасхода памяти?

Как хешировать большие файлы в Python без перерасхода памяти?

Опубликовано 6 ноября 2024 г.
Просматривать:514

How to Hash Large Files in Python without Memory Overconsumption?

Вычисление хэшей MD5 для больших файлов в Python

Модуль hashlib Python предоставляет удобный интерфейс для вычисления криптографических хэшей. Однако для исключительно больших файлов, размер которых превышает системную память, использование hashlib напрямую может быть проблематичным.

Решение: прогрессивное хеширование

Чтобы решить эту проблему, мы используем прогрессивное хеширование. читая файл управляемыми кусками. Такой подход гарантирует, что все содержимое файла хешируется без чрезмерного потребления памяти. Вот пример функции 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()

Чтобы вычислить хэш MD5 большого файла, вы можете вызвать функцию следующим образом:

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

Примечание о файловом режиме

Для получения точных результатов убедитесь, что вы открываете файл в двоичном режиме с помощью «rb». Использование «r» может привести к неверным расчетам.

Дополнительные замечания

Для удобства ниже представлена ​​улучшенная версия функции:

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

Для проверки точности рекомендуется перекрестная проверка рассчитанных хешей с помощью внешних инструментов, таких как jacksum.

Заявление о выпуске Эта статья перепечатана по адресу: 1729388119. В случае каких-либо нарушений, пожалуйста, свяжитесь с [email protected], чтобы удалить ее.
Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3