Nur um zu klären, Ihr Code bereits alle Linien „liest“. Um zu beginnen, Zeilen nach einem bestimmten Punkt "aufmerksam zu machen", können Sie einfach ein boolesches Flag setzen, um anzugeben, ob Zeilen ignoriert werden sollen, und es an jeder Zeile überprüfen.
pay_attention = False
for line in f:
if pay_attention:
print line
else: # We haven't found our trigger yet; see if it's in this line
if 'Abstract' in line:
pay_attention = True
Wenn Sie nicht ein wenig mehr Umordnung des Codes nichts dagegen haben, können Sie stattdessen auch zwei Teilschleifen verwenden: eine Schleife, die einmal beenden Sie Ihren Trigger-Satz ('Abstract'
) gefunden haben, und eine, die alle folgenden Zeilen liest. Dieser Ansatz ist ein wenig sauberer (und ein sehr kleines bisschen schneller).
for skippable_line in f: # First skim over all lines until we find 'Abstract'.
if 'Abstract' in skippable_line:
break
for line in f: # The file's iterator starts up again right where we left it.
print line
Der Grund dieser Arbeiten ist, dass das Dateiobjekt von open
verhält sich wie ein generator zurückgekehrt, eher als, sagen wir, eine Liste: Sie produziert nur Werte, wie sie angefordert werden. Wenn die erste Schleife stoppt, bleibt die interne Position der Datei am Anfang der ersten "ungelesenen" Zeile. Das bedeutet, wenn Sie die zweite Schleife eingeben, ist die erste Zeile, die Sie sehen, die erste Zeile nach der, die die break
ausgelöst hat.
Es funktioniert, aber es ist irgendwie komisch, meinst du nicht? und jeder, der nicht versteht, wie Generatoren arbeiten, wird sich den Kopf kratzen, warum er eine korrekte Ausgabe produziert. – Kroltan
@Kroltan, nun, ich nehme an, dass Leute, die Python betrachten, wissen, wie Python-Code funktioniert. Das ist ziemlich einfach Python –
Gut, aber ich wäre nicht so sicher, dass das OP davon bewusst ist. – Kroltan