Kopie von .py-Datei erstellen und mit Variable in Namen speichern

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
chris4321
User
Beiträge: 4
Registriert: Sonntag 23. Juli 2017, 09:15

Montag 24. Juli 2017, 09:40

Hallo,

ich hätte folgende Frage: Ich habe eine Code-Vorlage in welche ich jeweils unterschiedliche Temperaturen eingeben muss.
Das Vorlagen-Programm läuft dann mit dieser Temperatur durch und soll dann eine .py-Datei mit der eingegebenen T im Datei-Namen erstellen.
Der Name der Neuen .py Datei soll 'Reaktion bei T' sein
Woraufhin ich die nächste Temperatur T2 eingebe, das Vorlagen-Programm läuft durch und soll die 2. Datei als
'Reatkion bei T2' erstellen usw.
Ich habe es wie folgt probiert, die gewünschte Datei wird zwar erstellt, ist jedoch leer. Obwohl doch eignetlich in der erstellten Datei: 'Code: blablabla' stehen müsste.

Code: Alles auswählen

...
# Hier steht der Code der in die Neute Datei (Reaktion bei T)geschrieben werden soll
....
filename = 'Reaktion bei'+str(T)+'.py'
file = open(filename,'w+')
GanzerCodenochmal = 'Code: blablabla'
file.write(GanzerCodenochmal)
Falls jemand noch eine einfachere Methode kennt, die mir es ersparen würde alle Codezeilen in 'GanzerCodenochmal', zeile für zeile zu kopieren und mit \n\ zu trennen wäre das auch sehr hilfreich.
Danke.
Zuletzt geändert von Anonymous am Montag 24. Juli 2017, 10:00, insgesamt 1-mal geändert.
Grund: Quelltext in Python-Codebox-Tags gesetzt.
BlackJack

Montag 24. Juli 2017, 09:58

@chris4321: So etwas macht man nicht! Wenn Du Code oder Daten mehrfach hast, machst Du etwas falsch. Stell Dir mal vor Du erstellst mehrere Dateien davon und stellst dann fest, dass der Code einen Fehler enthält. So etwas macht nur unnötig Arbeit und bietet Angriffsfläche für Fehler, wenn man beispielsweise nicht jede Datei dann exakt gleich verändert.

Die Temperatur ist offensichtlich ein Parameter und den sollte man als Argument übergeben und nicht fest in Dateinamen und Quelltext schreiben.

Edit: 'w+' ist so ziemlich immer der falsche Dateimodus und Du schliesst die Datei nicht. Solange das Programm noch läuft kann es also daran liegen das in der Datei noch nichts steht. Zudem sollte man `file` nicht als Namen verwenden, denn das ist schon der Name des eingebauten Dateityps.
chris4321
User
Beiträge: 4
Registriert: Sonntag 23. Juli 2017, 09:15

Montag 24. Juli 2017, 11:38

@BlackJack Danke .close() hat gefehlt. Jetzt wird in der erstellten .py datei der Text von GanzerCodenochmal geschrieben.
Das ist genau was ich benötige, da ich in die Vorlage jeweils ca. 100 verschiedene Temperaturen und noch andere Parameter eingeben muss, und die Dateien genau mit den Input-Parametern benennen muss.
Durch .open usw. erspare ich mir die Input parameter für die mehreren 100 zu speichernden Datien, nochmals beim speichern einzugeben.
Natürlich muss das Vorlagen-Programm stimmen, was auch der Fall ist.

Es wär mir eine große hilfe wenn es eine Methode geben würde, die den ganzen Code der vor filename.open... steht, also der Code der die Reaktion simuliert in GanzerCodenochmal kopiert. Da sich der Code ja immer änderrt wenn ich neue Input Parameter eingebe.

Gibt es in Python einen Befehl bei dem ich sagen kann kopiere Content von Zeile x bis Zeile y und speichere ihn, in eine variable?
Sirius3
User
Beiträge: 7776
Registriert: Sonntag 21. Oktober 2012, 17:20

Montag 24. Juli 2017, 12:06

@chris4321: dafür gibt's nichts, weil man das nicht macht. Niemand generiert Code, wo man einfach eine Konfigurationsdatei schreiben könnte. Trenne Code von Daten.
Benutzeravatar
kbr
User
Beiträge: 853
Registriert: Mittwoch 15. Oktober 2008, 09:27

Montag 24. Juli 2017, 13:58

chris4321 hat geschrieben:Da sich der Code ja immer änderrt wenn ich neue Input Parameter eingebe.
Das hört sich nach einem komplett falschen Ansatz an. Wenn der auszuführende Programmcode, je nach Input, variiert, dann bedeutet dies Fallunterscheidungen im Programm, nicht aber mehrere Programme.
Benutzeravatar
DeaD_EyE
User
Beiträge: 179
Registriert: Sonntag 19. September 2010, 13:45
Wohnort: Hagen
Kontaktdaten:

Montag 24. Juli 2017, 16:03

Das macht man solange, bis mal Code ausgeführt wird, der z.B. mal eben die Festplatte löscht.

Code und Daten trennt man strikt. Man darf Userinput niemals vertrauen. Daraus auch noch Code zu generieren führt irgendwann zu einem bösen Erwachen. Auch nachträgliche Änderungen machst du dadurch sehr komplex. Stell dir mal vor du bastelst dir das jetzt irgendwie zusammen, wie du das haben möchtest und dann wird dich das die nächsten zwei - drei Jahre verfolgen.

Glaub mir, ich hatte den Fall einmal. Mal eben etwas für einen Provider programmiert und das war mindestens 5 Jahre im Einsatz. Irgendwann haben die das neu entwickelt (ich wollte damit nichts mehr zu tun haben). Er fragte mich, ob ich davon noch eine Kopie haben wollte. Ich sage ihm, dass er das bloß ganz schnell wegwerfen sollte.

Ein paar Monate später sprach mich jemand anderes an, der mein Script, das eigentlich im digitalen Papierkorb landen sollte, anpassen könnte. Glaub mir, den Fehler macht man nur einmal.
sourceserver.info - sourceserver.info/wiki/ - Support für HL2-Server
Antworten