Функциональная (без состояния) реализация, использующая Python и ленивые генераторы:
import itertools
def get_lines_between_marks(ilines, start_mark, end_mark):
for line in ilines:
if line.strip().lower() == start_mark:
yield list(itertools.takewhile(lambda s: s.strip().lower() != end_mark, ilines))
for group in get_lines_between_marks(open("file.txt"), "mark begin", "mark end"):
for line in group:
print line,
# Text 2
# Text 4
А теперь ваш второй запрос тривиален (см. Здесь здесь ):
def iterlast(it):
return reduce(lambda x, y: y, it)
for line in iterlast(get_lines_between_marks(open("file.txt"), "mark begin", "mark end")):
print line,
# Text 4