2016-06-05 3 views
0

Ich importierte eine Textdatei von URL und möchte sie verarbeiten. Die Datei sieht wie folgt aus. Es gibt zwei Instanzen von "Innings" und "Extras". Ich möchte Zeilen zwischen der ersten Instanz von "Innings" und der ersten Instanz von "Extras" extrahieren. Der Code, den ich geschrieben habe, extrahiert ALLE Instanzen. Wie kann ich das beheben?Python3 Extrahieren von Zeilen zwischen der ersten Instanz von zwei Markern

Toss: Sri Lanka Umpires: M Erasmus (Südafrika) und NJ Llong (England) TV Schiedsrichter: S Ravi (Indien) Spiel Schiedsrichter: DC Boon (Australien) Reserve Schiedsrichter: SD Fry (Australien) Spieler des match: CJ Anderson New Zealand Inning (50 overs maximal)
RMB 4 6 MJ Guptill c Sangakkara b Lakmal
49 94 62 5 0 CJ Anderson c Lakmal b Kulasekara 75 77 46 8 2
+ L Ronchi nicht aus 29 29 19 4 0
Extras (lb 2, w 8, Nb 3) 13 Gesamt (6 wickets, 50 overs, 226 min) 331
Sri Lanka Inning (Ziel: 332 läuft von 50 Overs) R MB 4 6 HDRL Thirimanne b Boult
65 90 60 8 0 RAS Lakmal nicht aus
Extras (w 10, NB 1) 11 Total (alle aus, 46,1 overs, 210 min) 233

Hier ist mein Code:

flag = 1 
for line in data: 
    if " innings " in line: 
     flag = 0 
     print('') 
    if line.startswith("Extras "): 
     flag = 1 
     print('') 
    if not flag and not " innings " in line: 
     print(line) 
+1

Sie müssen aus der Schleife "brechen", wenn Sie auf "Extras" stoßen –

Antwort

0

Ihr Programm auf dem ersten Auftreten von Extras stoppen müssen:

active = False # A variable `flag` is not very precisely named, 
       # better call it `active`, make it boolean 
       # and flip the values 
for line in data: 
    if " innings " in line: 
     active = True # now we want to do things 
     print('') 
     continue   # but not in this loop 
    if line.startswith("Extras "): 
     print('') 
     break    # now we're done! 
     # alternative Method: 
     # active = False 
    if active: 
     print(line) 

Wenn Sie alle Vorkommen speichern wollen:

active = False 
stored = [] 
for line in data: 
    if " innings " in line: 
     tmp = [] 
     active = True # now we want to do things 
     continue   # but not in this loop 
    if line.startswith("Extras "): 
     stored.append(tmp) 
     active = False 
     continue 
    if active: 
     tmp.append(line) 

Sie werden von einer Liste von Listen am Ende Linien für die weitere Verarbeitung.

+0

Funktioniert wie ein Charme! Kann ich diese Ausgabe im Pandas Dataframe speichern? Weißt du was, lass es mich zuerst versuchen, bevor ich Hilfe suche. –

+0

Was ist, wenn ich auch die Ausgabe einer zweiten Instanz möchte? Aber es sollte separat gespeichert werden. Wenn wir nach ersten "Extras" die Schleife verlassen, erhalten wir die erste Instanz. Zweitens scheint kniffliger. –

Verwandte Themen