170 похожих чатов

Друзья, а никто не сталкивался с необходимостью подсчитать checksum файла? У

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

Собственно вопрос - как лучше всего реализовать подобное без использования сторонних библиотек. Есть ли в стандартном наборе Python 3.9 что-то для реализации подобного? Как оно считает контрольную сумму у больших файлов ?

Мне именно подсчитать контрольную сумму нужно

19 ответов

19 просмотров

hashlib

Sapienti-Sat Автор вопроса
Alex
hashlib

def md5sum(filename): hash = md5() with open(filename, "rb") as f: for chunk in iter(lambda: f.read(128 * hash.block_size), b""): hash.update(chunk) return hash.hexdigest() Так ведь подходит?

Sapienti Sat
def md5sum(filename): hash = md5() with o...

норм, но блок можно взять и побольше.

Sapienti-Sat Автор вопроса

у сотни пользователей может быть одинаковый файл, они его будут грузить, но с разными именами (имя, описание итд + ссылка на файл хранятся в БД). Например, один загрузит с названием ххх.docx и заголовком "пример договора на ... ", а второй загрузить тот же xxx.docx с заголовком "образец договора на ...". Зачем хранить 2 файла, когда можно хранить 2 записи в БД, но с одной общей ссылкой на файл :)

охуенный план отстрелить себе яйца

Sapienti Sat
у сотни пользователей может быть одинаковый файл, ...

насколько вообще целесообразно заморачиваться такими вещами в век S3?

evgeniy
Почему?

потому что ты путаешь свой сраный локалхост и поиск дубликатов файлов с решением этой задачи в рамках сервиса.

Sapienti-Sat Автор вопроса
Alex
насколько вообще целесообразно заморачиваться таки...

Я старпёр :( оптимизация и всё такое сразу закладывается. В приоритете качество и скорость работы, вместо скорости разработки. Да и денег сэкономить на серверах после запуска MVP

Alex
потому что ты путаешь свой сраный локалхост и поис...

Так его функция делает тоже самое. Вроде.

evgeniy
Почему?

1. в условиях задачи не обозначены размеры файлов. 2. не обозначены требования по памяти для сервиса. 3. не обозначены предполагаемое количество одновременных операций.

evgeniy
Так его функция делает тоже самое. Вроде.

нет, твоя функция читает весь файл в память и потом уже вычисляет его хеш.

Sapienti Sat
Я старпёр :( оптимизация и всё такое сразу заклады...

лучше делать быстрее везде где только можно

что ты подразумеваешь под "нативно считается"?

Похожие вопросы

Обсуждают сегодня

30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
6
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Всем привет! Имеется функция: function IsValidChar(ch: UTF8Char): Boolean; var i: Integer; ValidChars: AnsiString; begin ValidChars := 'abcdefghijklmnopqrstuvwxyzABCDE...
Евгений
44
Карта сайта