Это решение itertools аккуратно. Ранее я был поражен itertools.groupby, одним удобным инструментом.
Но все же я просто возился, если бы мог сделать это без itertools. Так вот
(Есть одно предположение и один недостаток: файл не очень большой, и он проходит одну дополнительную полную итерацию по строкам соответственно.)
Я создал пример файла с именем "try":
hello
world
happy
day
bye
после прочтения файла и появления строк в имени переменной:
lines=open('./try').readlines()
тогда
print [each for each in lines if lines.index(each)<=[lines.index(line) for line in lines if 'happy' in line][0]]
дает результат:
['hello\n', 'world\n', 'happy\n']
и
print [each for each in lines if lines.index(each)<=[lines.index(line) for line in lines if 'day' in line][0]]
дает результат:
['hello\n', 'world\n', 'happy\n', 'day\n']
Итак, вы получили последнюю строку - также включена строка с условием остановки.