Войти Создать аккаунт

Дубликаты файлов · Шаг 2 из 4

Отпечаток содержимого

Сравнивать два файла байт за байтом можно, но если в кучке десять файлов, сравнений сорок пять. Проще посчитать каждому отпечаток — SHA-256, шестьдесят четыре знака, которые у разного содержимого не совпадают на практике никогда. Файлы бывают по нескольку гигабайт, поэтому читать их надо кусками.

Что сделать

Посчитайте отпечаток SHA-256 содержимого файла, читая его кусками по 64 КБ, а не целиком.

Что приходит

  • fayl — файл, открытый на чтение байтов (open(…, "rb") или io.BytesIO)

Что вернуть

Отпечаток — hexdigest() SHA-256, строка из 64 шестнадцатеричных знаков.

Допишите функцию otpechatok в редакторе справа. Результат верните через return — то, что напечатано, на проверку не влияет.

В проекте

Утилита открывает каждый файл из кучек и зовёт otpechatok. Файлы с одинаковым отпечатком — копии друг друга.

Пример

io.BytesIO(b"abc") — файл в памяти из трёх байтов. Его отпечаток — "ba7816bf…15ad": это SHA-256 от b"abc", тот же, что дал бы файл на диске с таким содержимым.

Тот же пример кодом
Перед вызовом
import io
Вызов
otpechatok(io.BytesIO(b"abc"))
Вернуть
'ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad'
Ctrl+Enter — проверить

Обсуждение

Вопросов пока нет.

Войдите, чтобы спросить.