Хорошо, вы знаете, в чем ваша проблема, уже из других комментариев / ответов, но позвольте мне просто заявить об этом.
Вы читаете только одну строку за раз в памяти, но вы сохраняетезначительная часть из них находится в памяти путем добавления в список.
Чтобы избежать этого, вам нужно что-то сохранить в файловой системе или базе данных (на диске) для последующего поиска, если ваш алгоритм достаточно сложен.
Из того, что я вижу, кажется, вы можете легко записать вывод постепенно.то есть. В настоящее время вы используете список для хранения действительных строк для записи в выходной файл , а также временных строк , которые вы можете удалить в определенный момент.Для повышения эффективности работы с памятью вы хотите записать строки из своего временного списка, как только узнаете, что это допустимые выходные данные.
В итоге используйте свой список для хранения только временных данных, которые необходимы для выполнения ваших расчетов на основеиз, и когда у вас есть некоторые действительные данные, готовые для вывода, вы можете просто записать их на диск и удалить их из вашей основной памяти (в python это будет означать, что у вас больше не должно быть ссылок на них.)