2017-08-16 2 views
0

Ich habe einen Code:Wie in Python zu bestimmten Punkt zurückschleifen

Ich möchte, dass mein Programm zurück zur for-Schleife nach der 3. if-Anweisung ausgeführt wird. Wenn ich "weiter" benutze, geht es zurück zur 2. if-Anweisung und nicht zurück zur for-Schleife. Irgendeine Idee, wie man das erreicht? Vielen Dank.

row = 0 
for line in fh: 

    if line.startswith('CREATE'): 
     startrow = row 
    if row > startrow: 
     if line.startswith('PRIMARY KEY'): (then go to the for loop) 
     print row 
    row = row + 1 
+1

Erklären Sie, was Sie tun möchten, nicht * wie * Sie es tun möchten. Bis jetzt enthält deine Frage nicht dein Ziel. – Tomalak

+0

Grundsätzlich möchte ich jene Zeilen erfassen, die zwischen den Zeilen sind, die mit "erstellen" beginnen und mit "Primärschlüssel" enden. Es gibt mehrere solcher Zeilen in meiner Datei. Daher möchte ich, dass meine Programmausführung in die for-Schleife zurückkehrt, sobald sie auf die Zeile trifft, die mit "Primärschlüssel" beginnt. – Bhaskar

+0

Verwenden Sie ein boolesches Flag, um die Ausgabe von Zeilen an Schlüsselpositionen ein- und auszuschalten und die Schleife normal laufen zu lassen. – Tomalak

Antwort

1

Per der Beschreibung in der Anmerkung, sind Sie auf der Suche Bereiche von Linien passende bestimmten Bedingungen, ähnlich wie awk '/^CREATE/,/^PRIMARY KEY/ {print}' zu drucken. Aus irgendeinem Grund haben Sie dies mit einem goto geplant, aus einem Konzept von verschachtelten Schleifen, die einfach nicht vorhanden sind. Wir könnten verschachtelte Schleifen schreiben, aber das müssen wir nicht.

printing = False 
for line in fh: 
    if line.startswith('PRIMARY KEY'): 
     printing = False 
    if printing: 
     print row 
    if line.startswith('CREATE'): 
     printing = True 

Diese Variante beginnt nicht druckt Linien, beginnt Linien Druck nach Begegnung mit CREATE und stoppt sofort wieder auf PRIMARY KEY zu stoßen. Sie können die drei Tests neu anordnen, um andere Kombinationen wie das Drucken der Zeilen mit diesen Keywords zu erzielen.

+0

Vielen Dank. Das hat geholfen! – Bhaskar

+0

@Bhaskar Vergessen Sie nicht, die Antwort als akzeptiert zu markieren, wenn Sie Ihre Frage gelöst haben. – Tomalak

Verwandte Themen