Hallo ich lese aus Dateien Werte aus und berechne damit gegebenenfalls neue Werte. Diese Schreibe ich dann in ein Textfile. Der Code sieht bisher so aus und funktioniert auch.
if not os.path.exists("out_Cyl1.txt"):
f = open("out_Cyl1.txt", "w")
width1 = 25
width = 15
fillchar = ' '
f.write('======Results======')
f.write('\nvariable'.ljust(width1, fillchar) + 'unit'.ljust(width, fillchar))
f.write('\nCycle'.ljust(width1, fillchar) + '#'.ljust(width, fillchar) + str(Cycle_Number))
f.write('\nAir Consumption'.ljust(width1, fillchar) + 'kg/h'.ljust(width, fillchar) + str(Air_Cons).ljust(width, fillchar))
f.write('\nFuel Consumption'.ljust(width1, fillchar) + 'kg/h'.ljust(width, fillchar) + str(Fuel_Cons).ljust(width, fillchar))
f.write('\nFuel_Mass_at_IP'.ljust(width1, fillchar) + 'mg'.ljust(width, fillchar) + str(FM_at_IP).ljust(width, fillchar))
f.write('\nAir_Mass_at_IP'.ljust(width1, fillchar) + 'mg'.ljust(width, fillchar) + str(AM_at_IP).ljust(width, fillchar))
f.write('\nInjected_Fuel'.ljust(width1, fillchar) + 'mg/cyc'.ljust(width, fillchar) + str(InjF_Cyc_01).ljust(width, fillchar))
Das Ergebnisfile sieht so aus:
======Results======
variable unit
Cycle # 15.0
Air Consumption kg/h 55.1826
Fuel Consumption kg/h 1.5172
Fuel_Mass_at_IP mg 39.8073
Air_Mass_at_IP mg 465.5966
Injected_Fuel mg/cyc 42.1451
Da ich das Skript öfter laufen lassen möchte habe ich folgende Frage: Wie kann ich weitere Werte an bestimmte Stellen des Txt_files anhänge?
Ich habe es bisher nur geschafft, dass mit append alles ans Ende des Files angehängt wird.
Werte an Ende Zeilenenden von txt-Datei anfügen
Hey,
Dateien sollte man mit dem with Statement öffnen, dann spart man sich auch den file.close() Aufruf, der bei dir sowieso fehlt. Strings stückelt man nicht mit + zusammen sondern benutzt Stringformatierung bzw. f-Strings.
Dateien sollte man mit dem with Statement öffnen, dann spart man sich auch den file.close() Aufruf, der bei dir sowieso fehlt. Strings stückelt man nicht mit + zusammen sondern benutzt Stringformatierung bzw. f-Strings.
Zuletzt geändert von Jankie am Montag 17. Februar 2020, 14:32, insgesamt 1-mal geändert.
Das funktioniert nicht. Man kann nicht an eine beliebig Stelle in eine Textdatei schreiben.
In der Regel geht man so vor, dass man die bisherige Datei einliest, in eine entsprechende Datenstruktur bringt, Änderungen vornimmt, in eine neue Datei speichert, die alte Datei löscht und die neue Datei umbenennt.
Zeichenketten baut man in Python nicht mit + zusammen sondern benutzt seit Python 3.6 sogenannte "f-Strings".
Wenn sich daraus übrigens Reihen und Spalten ergeben, würde ich darüber nachdenken, das ganze als CSV-Datei zu speichern.
In der Regel geht man so vor, dass man die bisherige Datei einliest, in eine entsprechende Datenstruktur bringt, Änderungen vornimmt, in eine neue Datei speichert, die alte Datei löscht und die neue Datei umbenennt.
Zeichenketten baut man in Python nicht mit + zusammen sondern benutzt seit Python 3.6 sogenannte "f-Strings".
Wenn sich daraus übrigens Reihen und Spalten ergeben, würde ich darüber nachdenken, das ganze als CSV-Datei zu speichern.
@MRO5494: Du hast ja eigentlich fast keine Textdatei sondern eine Binärdatei, mit festen Feldlängen für die einzelnen Werte; bis auf Cycle_Number und falls ein Wert die vorgegebene Länge überschreitet. Und das macht es auch schon wieder schwierig, Textdateien wie Binärdateien zu behandeln.
ljust habe ich auch noch nie in freier Wildbahn in Benutzung gesehen, für sowas benutzt man Formatvorgaben.
Das eine Cycle_Number ein Kommazahl ist, ist wohl ein Fehler. Floatingpoint-Zahlen sollte man immer mit einer fixen Anzahl an Nachkommastellen schreiben, vor allem dann, wenn man so eine Art "formatierte" Textausgabe hat.
Es gibt keinen Vorteil, nicht immer die komplette Text-Datei neu zu schreiben, weil eh immer ein kompletter Festplattenblock geschrieben wird und Deine Daten deutlich kleiner als die Blockgröße sind.
ljust habe ich auch noch nie in freier Wildbahn in Benutzung gesehen, für sowas benutzt man Formatvorgaben.
Das eine Cycle_Number ein Kommazahl ist, ist wohl ein Fehler. Floatingpoint-Zahlen sollte man immer mit einer fixen Anzahl an Nachkommastellen schreiben, vor allem dann, wenn man so eine Art "formatierte" Textausgabe hat.
Es gibt keinen Vorteil, nicht immer die komplette Text-Datei neu zu schreiben, weil eh immer ein kompletter Festplattenblock geschrieben wird und Deine Daten deutlich kleiner als die Blockgröße sind.