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