Если я правильно вас читаю, вы хотите сохранить все строки, которые:
- Начните со слова
switch
- Следовать после строки, начинающейся с
switch
, но до следующей пустой строки
Это не так уж сложно:
keptlines = []
with open(myfile) as f:
for line in f:
if line.startswith('switch '):
keptlines.append(line)
for line in f: # Continue iterating f for additional lines to keep
if not line.rstrip():
break # We hit an empty line, return to looking for switch
keptlines.append(line)
Существуют вариантные подходы, если вы хотите, чтобы различные переключатели были разделены (например, dict
, обозначенный номером переключателя, с list
s строк в качестве значений), но это основной шаблон.
Просто для полноты, существует вариантный подход для упрощения кода с использованием itertools
, добавление импорта в начало файла from itertools import takewhile
и замена:
for line in f: # Continue iterating f for additional lines to keep
if not line.rstrip():
break # We hit an empty line, return to looking for switch
keptlines.append(line)
только с:
keptlines.extend(takewhile(str.rstrip, f))
Подобный подход может подтолкнуть внешний цикл к вызову dropwhile
, но это будет довольно сложно (вы не можете удалить оболочку dropwhile
без потери данных, и вам придется перематывать ее для каждого нового switch
блок), так что, вероятно, оно того не стоит.