Schreiben einer Integer Liste in eine Textdatei

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
Benutzeravatar
nieselfriem
User
Beiträge: 135
Registriert: Sonntag 13. Januar 2013, 16:00

Hallo,

ich bin in Python 3 noch recht frisch und versuche eine Liste in eine Textdatei zu schreiben. Nun sollte das nicht so schwer sein. Aber so richtig komme ich dann dich nicht vorwärts:

Code: Alles auswählen

liste=[1,2,3,4,9]
f = open("text.txt","w")
for item in liste:
	f.write(str(item))
Die Textdatei wird angelegt jedoch nicht mit den Werten beschrieben.

Was mache ich falsch?

VG niesel
Sirius3
User
Beiträge: 17741
Registriert: Sonntag 21. Oktober 2012, 17:20

@nieselfriem: Du solltest die Datei auch wieder schließen, am besten mithilfe des with-Konstrukts.
Benutzeravatar
snafu
User
Beiträge: 6738
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

@nieselfriem: Eine ``write``-Operation schreibt nicht zwingend direkt auf die Festplatte. Stattdessen landen die Daten zunächst in einem Zwischenspeicher. Ein tatsächliches Schreiben (durch Leeren des Puffers) erreichst du mittels ``.flush()`` bzw ``.close()``. Letzteres ruft ``.flush()`` auf und schließt die Datei anschließend.

Der gängige Weg, sowas in Python zu machen, ist:

Code: Alles auswählen

with open(dateiname, 'w') as outfile:
    outfile.write(dein_text)
Dies schließt die Datei automatisch, nachdem der Block unterhalb des ``with``-Statements (also das mit ``outfile.write``) verlassen wurde.

Die technischen Hintergründe klangen vielleicht etwas kompliziert, aber wenn du dich an den oben genannten Codeschnipsel hälst, dann sollte Python sich so verhalten, wie du es dir vorgestellt hast (Dateiinhalt sofort in Datei).
BlackJack

@nieselfriem: Wenn die Daten dann sofort nach dem schreiben in der Datei landen solltest Du vielleicht noch Zeilenendezeichen nach jedem Wert schreiben, sonst wird das wiedereinlesen/trennen der Daten schwierig. ;-)
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Zudem gibt es für das Serialisieren von gängigen Python Datenstrukturen bereits fertige Libs, wie z.B. ``json`` oder ``pickle``. Evtl. sind diese geeigneter für Dein Vorhaben, da Du sonst das Parsen selber implementieren musst, falls Du die Daten wieder laden und nutzen willst... (was ja irgend wie meistens der Sinn einer Peristenz ist :-D )
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
Benutzeravatar
nieselfriem
User
Beiträge: 135
Registriert: Sonntag 13. Januar 2013, 16:00

Hi leute
Passt soweit wie ich es nun habe

Code: Alles auswählen

with open("text.txt","w") as f:
    for item in liste:
        f.write(str(item)+", ")
f.close()

Danke und Grüße

niesel
BlackJack

@nieselfriem: Das schliessen ist nicht notwendig, das wird vom ``with`` erledigt.
Benutzeravatar
/me
User
Beiträge: 3555
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

nieselfriem hat geschrieben:Passt soweit wie ich es nun habe
Das ist schön. Hoffentlich musst du die Daten nicht wieder einlesen, denn für Persistenz gibt es eindeutig bessere Formate.
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

/me hat geschrieben: Das ist schön. Hoffentlich musst du die Daten nicht wieder einlesen, denn für Persistenz gibt es eindeutig bessere Formate.
Wie man hier sieht, muss er das doch - ein Glück hatte ich ihm ja schon JSON genannt :twisted:
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
Antworten