Ausgabdateien in einer Schleife erzeugen

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
Tyrax
User
Beiträge: 73
Registriert: Mittwoch 4. Februar 2009, 18:31

Hallo Gemeinde,

ich erzeuge fuer die Ausgabedaten einer Simulation eine Datei und schreibe dann meine Daten hinein:

Code: Alles auswählen

f = file('Ausgabe.txt',  'w')
f.write('meine Daten')

Nun will ich innerhalb einer Schleife Daten fuer verschiedene Parameterwerte meiner Simulation erzeugen und in jedem Durchlauf gleich eine Datei erzeugen die die aktuellen Parameterwerte im Namen traegt, zB Ausgabe_i1_k7.txt. Ich habe sowas aehnliches schon mal gefragt und habe gelernt wie ich eine print-Ausgabe in meinem Sinne veraendern kann, dasIch lehrte mich:

Code: Alles auswählen

"Ist das Element {0} enthalten (0/1)".format(1)
Das format-Attribut gibt es soweit ich feststellen konnte nicht fuer die file-Methode. Wie muss ich also vorgehen?

Danke und Gruesse, Tyrax
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Code: Alles auswählen

filename = "datei_mit_der_nummer_{0}.txt".format(42)
fp = open(filename, "w")
...
Du solltest Dateien übrigens besser mit "open" öffnen und nicht mit "file".

Das "format" ist übrigens keine Methode von "print" sondern von Strings.
Zuletzt geändert von EyDu am Mittwoch 5. August 2009, 13:25, insgesamt 1-mal geändert.
Das Leben ist wie ein Tennisball.
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

Ich verstehe nicht so ganz, was du machen willst.
Willst du den Dateinamen parameterisieren? Oder die Zeile, die du schreibst?
Beides sind Strings und haben deshalb die Methode (oder auch die printf-Syntax).

Aber zum Snippet: Du solltest nicht ``file`` direkt nutzen, sondern ``open`` und du solltest ``with`` nutzen:

Code: Alles auswählen

with open(fname, 'w') as out_file:
    out_file.write(data)
Tyrax
User
Beiträge: 73
Registriert: Mittwoch 4. Februar 2009, 18:31

Hallo cofi und EyDu,

zwei schnelle und gute Antworten! Damit kann ich umgehen,

besten Dank, Tyrax

@cofi: Ich will die Dateinamen parametrisieren.
Tyrax
User
Beiträge: 73
Registriert: Mittwoch 4. Februar 2009, 18:31

Hallo EyDu,

ich bekomme es leider noch nicht ganz auf die Reihe. Wenn ich Deinen Code benutze, bekomme ich wie zuvor die Fehlermeldung:

"The debugged program raised the exception unhandled AttributeError
"'str' object has no attribute 'format'"

Sorry, aber ich verstehe im Moment nicht, was das Problem ist. (Meine Python-Version ist 2.51)

Gruesse, Tyrax
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

Das Problem ist, dass es die ``format`` Methode erst ab 2.6 gibt, d.h. du musst auf die alten Formatstrings zurueckgreifen: http://docs.python.org/library/stdtypes ... formatting
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Ganz einfach: die format-Methode gibt es erst ab 2.6. Suche einfach mal nach in der Doku nach "String Formatting". Das hier löst erstmal dein Problem:

Code: Alles auswählen

filename = "datei_mit_der_nummer_%d.txt" % 42
Edit:
cofi hat geschrieben:Edit: Timing ist alles ... :roll:
^^
Zuletzt geändert von EyDu am Mittwoch 5. August 2009, 14:45, insgesamt 2-mal geändert.
Das Leben ist wie ein Tennisball.
Tyrax
User
Beiträge: 73
Registriert: Mittwoch 4. Februar 2009, 18:31

Ah, ich hab's geahnt. Dummerweise sitze ich an einem Buero-Rechner und kann nicht selber auf 2.6x updaten. Danke jedenfalls fuer den Link.

Gruesse, Tyrax

@EyDu: Oh, cool. Danke.
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

EyDu hat geschrieben:Edit:
cofi hat geschrieben:Edit: Timing ist alles ... :roll:
^^
Hmm der suesse Geschmack von Rache :twisted:
Antworten