ich versuche Folgendes zu machen:
Gegeben sei eine eingelesene Text-Datei, welche komplett in einer Liste vorliegt. In diesem Text gibt es ein oder mehrere Textblöcke, die ich extrahieren möchte.
Jeder Textblock beginnt mit einen start_string und endet mit end_string.
Jeder start_string ist eindeutig dem gesuchten Textblock zugeordnet.
Der end_string beginnt immer mit demselben Text, endet aber unterschiedlich.
Der end_string kann auch an anderer Stelle im Text vorkommen.
Das Problem mit meinem Code ist das die letzte Zeile mit dem end_string nicht ausgegeben wird. Mir ist klar warum, aber ich sehe aufgrund der Text-Struktur keine andere Möglichkeit den end_string als Abbruchbedingung zu benutzen.
Habt ihr eine Idee, wie ich die letzte Zeile des Textblocks mit extrahieren kann, ohne die Abbruchbedingung von takewhile zu verändern?
Code: Alles auswählen
def extract_text(lines):
def check_line(line):
return not line.startswith(end_string)
line_nums = (line_num for line_num,line in enumerate(lines) if start_string in line)
for line_num in line_nums:
for line in takewhile(check_line, iter(lines[line_num:])):
yield line