Verwenden Sie Python, um bestimmte Zeilen von einer Datei in eine andere zu schreiben

Ich habe ~ 200 kurze Textdateien (50 KB), die alle ein ähnliches Format haben. Ich möchte in jeder dieser Dateien eine Zeile finden, die eine bestimmte Zeichenfolge enthält, und dann diese Zeile plus die nächsten drei Zeilen (aber nicht die restlichen Zeilen in der Datei) in eine andere Textdatei schreiben. Ich versuche, mir Python beizubringen, um dies zu tun, und habe ein sehr einfaches und grobes kleines Skript geschrieben, um dies auszuprobieren. Ich verwende Version 2.6.5 und führe das Skript vom Mac-Terminal aus:

#!/usr/bin/env python

f = open('Test.txt')

Lines=f.readlines()
searchquery = 'am\n'
i=0

while i < 500:
    if Lines[i] == searchquery:
        print Lines[i:i+3]
        i = i+1
    else:
        i = i+1
f.close()

Dies funktioniert mehr oder weniger und druckt die Ausgabe auf dem Bildschirm. Aber ich möchte die Zeilen stattdessen in eine neue Datei drucken, also habe ich Folgendes versucht:

f1 = open('Test.txt')
f2 = open('Output.txt', 'a')

Lines=f1.readlines()
searchquery = 'am\n'
i=0

while i < 500:
if Lines[i] == searchquery:
    f2.write(Lines[i])
    f2.write(Lines[i+1])
    f2.write(Lines[i+2])
    i = i+1
else:
    i = i+1
f1.close()
f2.close()

Es wird jedoch nichts in die Datei geschrieben. Ich habe es auch versucht

from __future__ import print_function
print(Lines[i], file='Output.txt')

und kann das auch nicht zum Laufen bringen. Wenn jemand erklären kann, was ich falsch mache, oder Vorschläge machen kann, was ich versuchen soll, wäre ich wirklich dankbar. Auch wenn Sie Vorschläge zur Verbesserung der Suche haben, würde ich diese ebenfalls begrüßen. Ich habe eine Testdatei verwendet, in der die Zeichenfolge, die ich suchen möchte, der einzige Text in der Zeile ist. In meinen realen Dateien befindet sich die benötigte Zeichenfolge jedoch noch am Zeilenanfang, gefolgt von einer Reihe anderen Texts Ich denke, die Art und Weise, wie ich die Dinge jetzt eingerichtet habe, wird auch nicht wirklich funktionieren.

Danke und sorry, wenn dies eine super grundlegende Frage ist!

Antworten auf die Frage(5)

Ihre Antwort auf die Frage