Zeilen aus einer .txt-Datei unter best. Bedingung heraussuchen
Verfasst: Freitag 7. Dezember 2018, 08:06
Hallo liebes Forum,
das ist mein erster Beitrag hier, deshalb bitte ich schon mal im Voraus um Gnade, was Fehler oder Ungenauigkeiten angeht.
Ich bin Python-Anfängerin, und habe folgendes Problem:
Aus einer .txt-Datei (nennen wir sie Quelle) möchte ich mittels Python bestimmte Zeichenketten nach folgendem Schema heraussuchen: die Datei enthält "Überschriften", die immer so anfangen: "AB_CD_...", oder "EF_GH_...", etc.
Im ersten Schritt möchte ich mir alle Überschriften, die mit "AB_CD" anfangen, in eine .txt-Datei namens Ziel schreiben lassen. Das hat soweit geklappt, hier mein Code dazu:
Nach jeder Überschrift folgen in meiner Quelldatei einige Zeilen Text, die unwichtig für mein Vorhaben sind. Nach einem Stichwort (sagen wir, es heißt "Stichwort_1") folgen allerdings immer eine bis mehrere Zeilen Text, die jedes Mal mit einem weiteren Stichwort (= "Stichwort_2") abgeschlossen werden. Beide Stichwörter sind bei allen Überschriften gleich, d.h. Stichwort_1 folgt auch auf Überschriften, die nicht mit AB_CD anfangen.
Mein Ziel ist es, in meine Ziel.txt-Datei nicht nur die Überschriften zu schreiben, sondern auch - immer jeweils nach der zugehörigen Überschrift - den Text zwischen den beiden Stichwörtern.
Meine bisherigen, leider fehlgeschlagenen Versuche, benutzen mehrere konditionierte Loops, hier ein Beispiel:
Hat jemand eine Idee, was ich falsch mache bzw. wie ich anders vorgehen sollte? Ich benutze Python 3 und bin für jede Hilfe dankbar!
LG
Rotkehlchen
das ist mein erster Beitrag hier, deshalb bitte ich schon mal im Voraus um Gnade, was Fehler oder Ungenauigkeiten angeht.
Ich bin Python-Anfängerin, und habe folgendes Problem:
Aus einer .txt-Datei (nennen wir sie Quelle) möchte ich mittels Python bestimmte Zeichenketten nach folgendem Schema heraussuchen: die Datei enthält "Überschriften", die immer so anfangen: "AB_CD_...", oder "EF_GH_...", etc.
Im ersten Schritt möchte ich mir alle Überschriften, die mit "AB_CD" anfangen, in eine .txt-Datei namens Ziel schreiben lassen. Das hat soweit geklappt, hier mein Code dazu:
Code: Alles auswählen
def suchisuch(Quelldatei, Zieldatei): # das ist die Subroutine, die die Überschriften aus der Datei rauskopiert...
Quelle = open (Quelldatei,'r+')
Ziel = open (Zieldatei,'w') # ...und sie in Ziel schreibt (jede Id in eine einzelne Zeile)
f = Quelle.readlines()
i = 0
while i < len(f):
if f[i].startswith("AB") == True: # zum Teil steht vor der eigentlichen Überschrift auch noch eine Art Header, der die gleichen ersten beiden Buchstaben wie die Überschrift hat
k = f[i]
l = k.split(' ')
if l[2].startswith("AB_CD") == True:
Id_gefunden = l[2]
Ziel.write(Id_gefunden)
Ziel.write('\n')
elif f[i].startswith("AB_CD") == True:
k = f[i]
l = k.split(' ')
Id_gefunden = l[0]
Ziel.write(Id_gefunden)
Ziel.write('\n')
i += 1
Quelle.close()
Ziel.close()
Mein Ziel ist es, in meine Ziel.txt-Datei nicht nur die Überschriften zu schreiben, sondern auch - immer jeweils nach der zugehörigen Überschrift - den Text zwischen den beiden Stichwörtern.
Meine bisherigen, leider fehlgeschlagenen Versuche, benutzen mehrere konditionierte Loops, hier ein Beispiel:
Code: Alles auswählen
def suchisuch_2(Quelldatei, Zieldatei): # diese Sub schreibt auch den Teil zwischen der Überschrift und Stichwort_1 in Ziel
Quelle = open (Quelldatei,'r+')
Ziel = open (Zieldatei,'w')
f = Quelle.readlines()
i = 0
while i < len(f):
if f[i].startswith("AB") == True:
k = f[i]
l = k.split(' ')
if l[2].startswith("AB_CD") == True:
Id_gefunden = l[2]
Ziel.write(Id_gefunden)
Ziel.write('\n')
j = 0
while f[i+j].startswith("Stichwort_2") == False:
Ziel.write(f[i+j])
Ziel.write('\n')
j += 1
elif f[i].startswith("AB_CD") == True:
k = f[i]
l = k.split(' ')
Id_gefunden = l[0]
Ziel.write(Id_gefunden)
Ziel.write('\n')
j = 0
while f[i+j].startswith("Stichwort_2") == False:
Ziel.write(f[i+j])
Ziel.write('\n')
j += 1
i += 1
Quelle.close()
Ziel.close()
def suchFilter(Datei): # soll aus dem von der vorherigen Sub erzeugten Datenwust nur noch die Überschriften und den Text zwischen den Stichwörtern raussuchen
Ziel = open(Datei, 'r+')
Zeilen = Ziel.readlines()
i = 0
while i < len(Zeilen):
if Zeilen[i].startswith("AB_") == True:
j = 1
while Zeilen[i+j].startswith("Stichwort_1") == False:
del Zeilen[i+j]
j += 1
del Zeilen[i+j+1]
i += 1
Ziel.close()
Superziel = open(Datei, 'w')
for i in Zeilen:
Superziel.write(i)
Superziel.close()

LG
Rotkehlchen