Wie speichert man Listen ab??

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
theotter
User
Beiträge: 27
Registriert: Mittwoch 30. Juni 2010, 16:08

Ich habe eine Liste, die ich im Verlaufe des Programmablaufes ändern will.
Das Programm soll dann die neue Liste verwenden.
Wie kann man die veränderte Liste abspeichern??
Beispielliste: a = [1,3,5,7]
Danke im Vorraus!
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

theotter hat geschrieben:Ich habe eine Liste, die ich im Verlaufe des Programmablaufes ändern will.
Das Programm soll dann die neue Liste verwenden.
Was meinst du mit "neue Liste verwenden"? Kanonische Antwort: Indem du sie an den entsprechenden Stellen übergibst.
theotter hat geschrieben:Wie kann man die veränderte Liste abspeichern??
Was meinst du mit "abspeichern"? Persistent auf der Festplatte? Kopien erzeugen?
theotter
User
Beiträge: 27
Registriert: Mittwoch 30. Juni 2010, 16:08

Ich will die Liste in einer anderen Datei speichern(sie soll in dieser Datei sein, also Festplatte denke ich mal) und später daraus wieder laden.
BlackJack

@theotter: Schau Dir mal das `json`-Modul an.
theotter
User
Beiträge: 27
Registriert: Mittwoch 30. Juni 2010, 16:08

Danke, aber ich bin noch nen absoluter Neuling und habe nicht ganz verstanden was Python mir mit der Hilfefunktion über das json Modul sagen wollte.
Könntest du mit nen kleines Bsp. geben damit ich es verstehe??
Danke
Dav1d
User
Beiträge: 1437
Registriert: Donnerstag 30. Juli 2009, 12:03
Kontaktdaten:

schau dir mal json.dumps (http://docs.python.org/library/json) an und evt. das pickle Modul (http://docs.python.org/library/pickle.html)
the more they change the more they stay the same
theotter
User
Beiträge: 27
Registriert: Mittwoch 30. Juni 2010, 16:08

Ok, es hat geklappt, das ich etwas einspeichere, aber das sieht mir nicht ganz wie ne liste aus bzw. weiß ich nich wie ist das wieder in die "normale" Listenform bekomme.
ms4py
User
Beiträge: 1178
Registriert: Montag 19. Januar 2009, 09:37

theotter hat geschrieben:Ok, es hat geklappt, das ich etwas einspeichere, aber das sieht mir nicht ganz wie ne liste aus bzw. weiß ich nich wie ist das wieder in die "normale" Listenform bekomme.
Vielleicht erzählst du uns, wie du jetzt vorgehst...
„Lieber von den Richtigen kritisiert als von den Falschen gelobt werden.“
Gerhard Kocher

http://ms4py.org/
theotter
User
Beiträge: 27
Registriert: Mittwoch 30. Juni 2010, 16:08

import cPickle as cp

a = [1,2]
f = open("test.py","wb")

cp.dump(a,f)
f.close()
theotter
User
Beiträge: 27
Registriert: Mittwoch 30. Juni 2010, 16:08

Das wird in der Datei abgespeichert:

(lp1
I1
aI2
a.
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

Eben wieder mit pickle, in dem Fall `pickle.load`.
Edit: Nicht vergessen die Datei im Binaermodus zu oeffnen.
Und wenn du eine Menschen-lesbare version haben willst, solltest du JSON benutzen.

P.S. Wenn man mit `c*`-Modulen arbeitet, sollte man so vorgehen:

Code: Alles auswählen

try:
    import cPickle as pickle
except ImportError:
    import pickle
theotter
User
Beiträge: 27
Registriert: Mittwoch 30. Juni 2010, 16:08

Danke!
Es klappt wunderbar!
theotter
User
Beiträge: 27
Registriert: Mittwoch 30. Juni 2010, 16:08

Wie lädt man mit Json?

Hier der Code:

import json

f = open("test.py","wb")
print json.loads("test.py","wb")
f.close()

Es kommt bloß immer einer Fehlermeldung.
In diese Datei wurde die Liste eingespeichert.
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Lies Dir doch mal die Doku genau durch! Bei pickle hast Du ja auch load verwendet, nicht loads!

Im übrigen würde ich bei JSON die Datei nicht im Binärmodus öffnen. JSON ist ja ein reines Textformat.

Außerdem öffnte man Dateien mit Hilfe des with-Statement:

Code: Alles auswählen

with open(..) as infile:
    # mache irgend was mit infile
Damit wird garantiert, dass die Datei auf jeden Fall wieder geschlossen wird, egal, ob eine Exception auftritt o.ä.
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
theotter
User
Beiträge: 27
Registriert: Mittwoch 30. Juni 2010, 16:08

So ich habe es jetzt weiter versucht und bin mit der Doku, aufgrund der Fachbegriffe nicht ganz so zurecht gekommen.
Es kommt immer wieder die Fehlermeldung:

Traceback (most recent call last):
File "E:/Python26/Listenspeicherung.py", line 5, in <module>
with open(f) as infile:
TypeError: coercing to Unicode: need string or buffer, file found

Was heißt das bitte und viel wichtiger, wie kann man das lösen??
theotter
User
Beiträge: 27
Registriert: Mittwoch 30. Juni 2010, 16:08

Der jetzige Code:

import json

f = open("test.py","wb")
with open(f) as infile:
print json.load(f)
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Hallo.

Vielleicht solltest du Google einfach mal nach "python with" fragen. Und eine Datei zum Schreiben zu öffnen und daraus zu lesen ist nicht die klügste Idee.

Das einzige was hilft: mal das Tutorial durcharbeiten.
Das Leben ist wie ein Tennisball.
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

theotter hat geschrieben: Was heißt das bitte und viel wichtiger, wie kann man das lösen??
Indem mans ich entweder die Doku anguckt, welche Parameter die open()-Funktion erwartet, oder sich seinen eigenen Code (!) noch einmal anguckt oder aber genau die Fehlermeldung anguckt, die einem ja verrät, was die open()-Funktion als Parameter bekommen hat und was sie aber stattdessen erwartet!

Zudem:
Wir haben spezielle Code-tags hier im Forum, mit denen man Quelltext im Allgemeinen und Python sogar mit Syntax-Highlighting versehen kann.
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
ms4py
User
Beiträge: 1178
Registriert: Montag 19. Januar 2009, 09:37

`f` muss der Dateiname (inkl. Pfad) sein. Danach ist `infile` dein Datei-Objekt, das du zum Laden verwenden sollst.
„Lieber von den Richtigen kritisiert als von den Falschen gelobt werden.“
Gerhard Kocher

http://ms4py.org/
Antworten