Ich habe eine Textdatei, die als Initialisierungsdatei für ein Modell dient. Es sieht wie folgt aus:Zeilen lesen und schreiben n mal
foo1
foo2
bar, foo, yolo
1, 2, 3
foo3
foo4
Linie 3 ist die Kopf- und 4 nimmt die Werte und die beiden Linien müssen abhängig werden wiederholt, wie groß x ist. Angenommen, x = 3. Die folgenden Zeilen sollten nicht überschrieben, sondern nach unten verschoben werden. Die Zeilen davor (foo1 & foo2) werden dynamisch generiert, es gibt also nicht unbedingt nur zwei Zeilen, daher kann ich nicht einfach auf deren Index zugreifen!
So sollte meine Datei wie folgt aussehen dann:
foo1
foo2
bar, foo, yolo
1, 2, 3
bar, foo, yolo
1, 2, 3
bar, foo, yolo
1, 2, 3
foo3
foo4
Meine Idee so weit:
initraw = open('fileX.txt', "r") #opening raw file for reading
initwrite= open('fileY.txt', "w") #opening file for writing
initline = initraw.readlines() #writing content of raw file into string
x = 3
for line in initline:
initwrite.writelines(line,)
if line.startswith('bar, foo, yolo'):
for i in range(x):
initwrite.writelines(initline[2])
initwrite.writelines(initline[3])
initwrite.close() #closing file
initraw.close() #closing raw file
Jeder Vorschlag, wie diese zu lösen? Im Moment sieht das so aus:
foo1
foo2
bar, foo, yolo
bar, foo, yolo
1, 2, 3
bar, foo, yolo
1, 2, 3
1, 2, 3
foo3
foo4
Also muss ich die erste Zeile nach "bar, foo, yolo" überspringen.
wird dies nicht die Grenzen zwischen der 'bar' Zeile schreiben und der' 1, 2, 3' Linie? Sie sollten nur die Indizes der Zeilen finden, nach denen die neuen Zeilen kommen sollen, und Sie werden 'insert' verwenden, um sie zu' initline' hinzuzufügen. (Das liegt daran, dass "readlines" eine "Liste" von Strings und keine Zeichenfolge zurückgibt) –
@PatrickHaugh siehe meine letzte Änderung ... ja, du hast Recht. Aber die Anzahl der Zeilen vor den Zeilen, die ich replizieren muss, ist nicht festgelegt, daher muss ich leider 'startswith' verwenden. – GeoEki