iskrama
Есть два больших файла (больше гига).
Под большими обычно понимают файлы которые не лезут в оперативную память. Для больших файлов используют СУБД там есть алгоритмы для работы с последовательностями которые не лезут в память.
То что вы описываете это основная операция СУБД. Называется join. Обычно эту задачу решают импортом в базу данных и применением одной команды. Тем более что потом можно будет еще что-то сделать.
iskrama
Необходимо взять значение из второго(и/или третьего) столбца и найти совпадение во втором файле.
Ваш код делает не то что вы описали словами. Так что надо?
iskrama
а вот вычленить отдельные элементы не могу.
Вычленяют обычно применяя
Если все это надо сделать один раз в жизни то можно решить так: Пройти по меньшему файлу и накопить словарь
{"содержимое колонки 2 со строки 5":[[200,500],[800,900]],"содержимое колонки 3 со строки 6":[[250,550],[850,950]]...}
Ключик тут - то что вы будете искать в другом файле, значение - координаты начала и конца строки в файле поскольку уникальность ключей не оговорена это список. см seek, tell у файла.
Далее идете последовательно по второму файлу и что-то делаете. Что я не понял:
iskrama
и найти совпадение во втором файле
Это строка полностью должна совпасть или поле? или любое поле? В общем если тест можно будет оформить операцией in со словарем то все нормально.
Эти строки второго файла можете сразу писать в третий. А координаты строк первого добавляете в новый список. Этот список сортируете по возрастанию координаты строки. И операциями seek,read извлекаете строки. Если список не отсортировать то вас замучают операции seek и вы будете долго ждать результата (если конечно что-то найдется).
Операция lines обычно работает медленно. Если сможете организуйте блочное чтение файла.
Ну вот, это если по простому, а по сложному берете sqlite и пишете одну строчку после ознакомления с мануалом.