While True in einer for Schleife
Verfasst: Freitag 17. März 2017, 12:00
Bring mir Python seit einer Woche bei und habe nun folgendes Problem. Ich habe eine Datei in eine Liste geladen.
Ich schreibe diese Liste zeilenweise in eine neue Datei. Sobald nun eine Bedinung für die Zeile zutrifft, soll er für alle nachfolgenden Zeilen eine Anweisung machen, bis eine zweite Bedingung zutrifft. Die erste Bedinung trifft aber nur für die eine Zeile zu. Die danachfolgenden Zeilen erfüllen nicht mehr die Bedingungen, was mich zu meinem Dilemma mit dem zeilenweisen Schreiben bringt...
Der Inhalt der Datei, um den es geht, sieht so aus (nur ein kleiner Ausschnitt):
Er soll erkennen, wenn "XYS 1" dasteht, dass es Werte für "BCS 1 1" sind und wenn "XYS 2" in der Zeile vorkommt, dass die nachfolgenden Zeilen die Werte für "BCS 2 1" beinhalten. So soll er es letztendlich in die neue Dateien schreiben (time1.txt für BCS 1 1 und time2.txt für BCS 2 1 usw.), die dann für die Weiterverarbeitung genutzt werden.
Würde mich freuen, wenn ihr mir ein paar Anregungen /Tipps dazu geben könntet. Die "while True if bedingung: break" Variante funktioniert ja nicht, wegen dem zeilenweisen schreiben (for n in liste2).
Danke schonmal
Code: Alles auswählen
with open(datei, "r") as g:
liste2 = list(g)
g.close()Code: Alles auswählen
alles = ["MESH2D", "E4Q", "E3T", "ND", "E2L", "E3L", "NUM_MATERIALS_PER_ELEM", "E6T", "E8Q", "E9Q", "NS", "GM", "SI", "DY", "TU", "TD", "KEY", "PG", "PD", "BD", "BCPGC", "NUME", "BV", "BCDISP", "BEDISP", "MV", "MAT_DEF", "BEGPARAMDEF", "ENDPARAMDEF", "BEG2DMBC", "BCN", "BCS", "MAT", "END2DMBC", "MAT_VAL", "BEFONT"]
string1 = "END2DMBC"
with open('time1.txt', "w") as f:
for n in liste2:
nliste = n.split()
set1 = set(nliste)
set2 = set(alles)
set3 = set1.intersection(set2)
if len(set3) == 0:
if nliste[0] != "0" or nliste[0] != "0.0":
wert = "BCS "+"1 "+"1 "+nliste[1]+"\n"
f.write(wert)
else:
pass
f.write(string1+"\n")
f.close()Habe wichtige Infos der Dateien mal hervorgehoben.BCS 1 1 2 1.71724100e+002
BCS 2 1 3 4.77263000e+001
XYS 1 61 "Curve"
0.0 0.0
900.0 0.0624
1800.0 0.1872
2700.0 0.3744
3600.0 0.7488
4500.0 1.248
5400.0 1.9968
...
XYS 2 61 "Curve"
0.0 0.0
900.0 0.4529
1800.0 1.3587
2700.0 2.7174
3600.0 5.4348
4500.0 9.058
5400.0 14.4928
Er soll erkennen, wenn "XYS 1" dasteht, dass es Werte für "BCS 1 1" sind und wenn "XYS 2" in der Zeile vorkommt, dass die nachfolgenden Zeilen die Werte für "BCS 2 1" beinhalten. So soll er es letztendlich in die neue Dateien schreiben (time1.txt für BCS 1 1 und time2.txt für BCS 2 1 usw.), die dann für die Weiterverarbeitung genutzt werden.
Würde mich freuen, wenn ihr mir ein paar Anregungen /Tipps dazu geben könntet. Die "while True if bedingung: break" Variante funktioniert ja nicht, wegen dem zeilenweisen schreiben (for n in liste2).
Danke schonmal