• XSS.stack #1 – первый литературный журнал от юзеров форума

Как быстро сравнить два больших файла на python?

blackrtruth

CD-диск
Пользователь
Регистрация
14.05.2023
Сообщения
12
Реакции
1
Делаю что-то типа антипаблика, появился вопрос как сравнить 2 больших текстовика на дубли. Есть идея использовать просто батник для сверки и через питон его запускать, но может, есть какие то способы получше с максимальной скоростью и ресурсоэффективностью? Проблема в том что я не хочу загружать файлы в оперативную память и нужна максимальная скорость и ресурсоэффективность. Захотелось узнать ваше мнение
 
я не хочу загружать файлы в оперативную память и нужна максимальная скорость и ресурсоэффективность
И не сможете.

Либо используйте уже готовый вариант из стандартного дистрибутива linux - утилита comm (так же входит в набор Coreutils для винды).
Либо как вариант использовать более сложные варианты как загрузка баз в СУБД и последующая обработка.
Либо пишие новую тулзу, потому, что лично я аналогов не встречал.
 
Пожалуйста, обратите внимание, что пользователь заблокирован
Делаю что-то типа антипаблика, появился вопрос как сравнить 2 больших текстовика на дубли. Есть идея использовать просто батник для сверки и через питон его запускать, но может, есть какие то способы получше с максимальной скоростью и ресурсоэффективностью? Проблема в том что я не хочу загружать файлы в оперативную память и нужна максимальная скорость и ресурсоэффективность. Захотелось узнать ваше мнение
1. OS какая?
2. Насколько большие файлы?
3. "На дубли" == "на пересечения"?
4. С найденными дублями что делать? Что на выходе должно быть? Объединенный файл без дублей?
 
Делаю что-то типа антипаблика, появился вопрос как сравнить 2 больших текстовика на дубли. Есть идея использовать просто батник для сверки и через питон его запускать, но может, есть какие то способы получше с максимальной скоростью и ресурсоэффективностью? Проблема в том что я не хочу загружать файлы в оперативную память и нужна максимальная скорость и ресурсоэффективность. Захотелось узнать ваше мнение
попробуй использовать нативное апи ос или иные варианты для быстрого чтения файла, и складывай crc32\crc64 хеши строк в массив и сверяй. что-бы точно без коллизий бери crc64 8 байт всего хеш, или crc32 у которого 4 байта.
для питона есть numpy.in1d который использует нативные либы для проверки массива на совпадения.

вариант для чтения файла без маппинга всего файла в память может выглядеть как то так:

Python:
with open('antipub.txt', 'r') as file:
    with mmap.mmap(file.fileno(), length=0, access=mmap.ACCESS_READ) as m:
        for line in iter(m.readline, b''):
            //твой код
 
так же что бы не хранить хеши в памяти можешь создавать временные рабочие файлы с этими хешами и хранить их там.
потом в процессе сверки читать по 4 байта и сверять (если crc32)
 
Делаю что-то типа антипаблика, появился вопрос как сравнить 2 больших текстовика на дубли. Есть идея использовать просто батник для сверки и через питон его запускать, но может, есть какие то способы получше с максимальной скоростью и ресурсоэффективностью? Проблема в том что я не хочу загружать файлы в оперативную память и нужна максимальная скорость и ресурсоэффективность. Захотелось узнать ваше мнение
используй мультипроцессинг. Прочел один файл, параллельно второй, а потом идет сравнение(чтение идет ядрами)
 
используй мультипроцессинг
Какой в этом смысл, если задействована скорость чтения\записи винчестера? Вы просто будете скорость обработки делить между несколькими файлами. Это мог бы быть смысл, если обрабатывать в памяти, но не думаю, что очень намного ускорите процесс.
 
Какой в этом смысл, если задействована скорость чтения\записи винчестера? Вы просто будете скорость обработки делить между несколькими файлами. Это мог бы быть смысл, если обрабатывать в памяти, но не думаю, что очень намного ускорите процесс.
Не на много, но ускорит. Да, задействована скорость чтения диска, но насколько я знаю ядра тоже играют роль, выполняя второстепенные задачи, грубо говоря, менеджерят процессы I/O
 
Последнее редактирование:


Напишите ответ...
  • Вставить:
Прикрепить файлы
Верх