In einer Datei eine Zeile verändern

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Phytonnoob
User
Beiträge: 4
Registriert: Donnerstag 5. September 2013, 13:34

Hallo Zusammen,

ich bin erst seit heute in der Phyton Programmierung und bin an meine grenzen gestoßen :)
ich bräuchte ein Befehl, wie ich den Satz in einer Zeile verändern / löschen und etwas anderes einfügen kann (siehe Beispiel)

z.B.:

Position.in.X=144.98 (Ist Zustand)

Position.in.X=145 (soll Zustand)

Ich habe es geschafft die Zahl zu runden, nur finde ich jetzt kein Befehl wie ich die 144.98 mit den 145 ersetzen kann?
Ich bin für jedliche Hilfe sehr Dankbar.

P.S.: Es ist in einer Datei mit mehreren Zeilen sieht etwas komplexer aus als hier.

Vielen Dank:)
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Hallo und willkommen im Forum!

Wenn sich die Länge der Daten ändert, dann gibt es keine Möglichkeit einfach etwas einzufügen. Am einfachsten ist es, wenn du die ganze Datei neu schreibst.
Das Leben ist wie ein Tennisball.
Phytonnoob
User
Beiträge: 4
Registriert: Donnerstag 5. September 2013, 13:34

Danke schonmal für die Antwort :)

Wenn ich die Datei neu schreibe, muss ich doch trotzdem die X koordinaten ersetzen. Also stoße ich doch auf das selbe Problem oder nicht?

Grüße
Benutzeravatar
/me
User
Beiträge: 3554
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

Phytonnoob hat geschrieben:Wenn ich die Datei neu schreibe, muss ich doch trotzdem die X koordinaten ersetzen. Also stoße ich doch auf das selbe Problem oder nicht?
Wenn du doch schon die passenden Teile der Zeile extrahiert hast, dann kann das eigentlich kein Problem mehr darstellen.

Code: Alles auswählen

>>> parts = 'Position.in.X=144.98'.split('=')
>>> print(parts)
['Position.in.X', '144.98']
>>> print(round(float(parts[1])))
145
>>> print('{0}={1}'.format(parts[0], round(float(parts[1]))))
Position.in.X=145
Oder welche obskuren Wege bist du gegangen um die Zahl in der Zeile zu ermitteln?
Phytonnoob
User
Beiträge: 4
Registriert: Donnerstag 5. September 2013, 13:34

Hallo - /me,

deine Antwort hat mir schon sehr weiter geholfen, danke Dir :)

Wenn ich nun die Datei habe wie sie unten zu sehen ist

job.job_info.identification.plattform=IN117
job.job_info.identification.baulos=C-PRO-ND
job.job_info.identification.lastfall@#INPUT#=UR5b_270_50
job.job_info.basic_variant=v033
job.job_info.classification.Pruefpunktkoor_x=1442.913
job.job_info.classification.Pruefpunktkoor_y=-413.737
job.job_info.classification.Pruefpunktkoor_z=1026.230

job.job_info.classification.Trefferknoten=222
job.job_info.classification.Trefferabweichung_y=7.6421
job.job_info.classification.Trefferabweichung_z=25.4684

job.job_info.classification.horizontal_angle=270
job.job_info.classification.vertical_angle=50
job.job_submit.output_path=.
job.job_submit.output_extensions=*

und ich die (Fett markierten) Koordinaten nun runden muss und wieder in die Datei schreiben möchte - gibt es da eine Möglichkeit diese Zeile zu ersetzen ?
Oder muss ich wie der Kollege davor schon geschrieben die ganze Datei neu schreiben?
Phytonnoob
User
Beiträge: 4
Registriert: Donnerstag 5. September 2013, 13:34

P.S.: Zu deiner Frage welchen obskuren Weg ich gegangen bin :)
meins sah so aus:

Code: Alles auswählen

PK_X=" "
data = data_file.readlines()

for line in data:
                     if  "x" in data[10]:
									
					s=data[10]			
					x = len(s)-45		
					PK_x = int(round((float(s[-x:len(s)]))))	
					XKORD = str(PK_x)
					del data[10]
					outfile.write(XKORD)
					outfile.write('\n')
großer Umweg weil ich die ganzen begriffe in Phyton noch nicht kenne :/
BlackJack

@Phytonnoob: Du musst die Datei neu schreiben. Denn die Länge der Zeilen ändern sich ja und damit auch die Position der Bytes aller nachfolgenden Zeilen. Es ist einfacher und sicherer die Daten zu lesen, in einer neue, temporäre Datei zu schreiben, und die dann am Ende zur ursprünglichen Datei umzubenennen. Dann hast Du selbst wenn das Programm mittendrin abbricht (Stromausfall, Absturz, …) mindestens einen der beiden Zustände, vorher oder nachher, noch komplett auf der Festplatte.
Antworten