Seite 1 von 1
Daten wieder laden und anzeigen?
Verfasst: Samstag 3. Juni 2006, 13:04
von skunkk90
Hallo,
ich habe folgendes vor:
stellen wir uns mal vor man gibt einem Programm mehrere Eingaben und schliesst es dann. Beim wieder öffnen soll dann das Programm auf einen Klick diese vorher eingebenen Eingaben anzeigen.. Und eventuell auch neue Eingabe dazu spiechern... Eine Art Archiv für Zahlen o.Ä....
Wie kann ich dieses Problem lösen?
Das mit dem Abspeichern is no prob, das kann ich!
nur wie gibt das Programm eben vorher abgespeicherte Dinge wieder?
(zB aus einer .txt Datei)
mfg skunkk90
Verfasst: Samstag 3. Juni 2006, 14:05
von Python 47
Hallo,
wie wäre es hiermit?
Code: Alles auswählen
x=raw_input('Geben Sie was ein:')
f=open('datei.txt', 'w')
f.write(x)
f.close
Und zum Wiedergeben der Eingabe:
Du bekommst zwar eine Liste wieder, aber das kannst du mit dem Modul pickle beheben!

Re: Daten wieder laden und anzeigen?
Verfasst: Samstag 3. Juni 2006, 16:31
von Leonidas
skunkk90 hat geschrieben:Das mit dem Abspeichern is no prob, das kann ich!
nur wie gibt das Programm eben vorher abgespeicherte Dinge wieder?
Ich würds mit pickle speichern und mit unpickle wieder laden.
Verfasst: Samstag 3. Juni 2006, 18:50
von skunkk90
das problem is nur, dass ich nicht weiss was pickle ist, damit habe ich mich noch nicht befasst...
Verfasst: Samstag 3. Juni 2006, 18:58
von Joghurt
http://docs.python.org/lib/module-cPickle.html
Code: Alles auswählen
>>> import cPickle
>>> a = [1,2,3,4,5]
>>> a
[1,2,3,4,5]
>>> cPickle.dump(a, open("datei", "w"))
>>> del a
>>> a = cPickle.load(open("datei"))
>>> a
[1,2,3,4,5]
Verfasst: Samstag 3. Juni 2006, 20:03
von murph
nur was ganz persönliches:
ich würde die immer in einen anderen ordner legen;
"datei.pickle" sieht nicht schön aus...
is aber reine geschmackssache...
Verfasst: Samstag 3. Juni 2006, 20:17
von skunkk90
so habe nun folgendes prob:
Code: Alles auswählen
def arbeite():
a=killsEntry.get()
b=deathsEntry.get()
kills=float(a)
deaths=float(b)
kdsession= kills/deaths
cPickle.dump(kdsession, open("KD Career.txt","w"))
KDsession=str(kdsession)
sessionKD.config(text='('+KDsession+')')
def close():
hf.destroy()
def archiv():
fenster2=Toplevel(hf)
fenster2.title('KD Career')
frame2=Frame(fenster2,width=220,height=220)
frame2.pack()
def close2():
fenster2.destroy()
ausgabefeld=ScrolledText(frame2, width=31,height=13)
ausgabefeld.place(x=5,y=5)
close2=Button(frame2, text='Fenster schliessen', command=close2)
close2.place(x=60,y=190)
a = cPickle.load(open("KD Career.txt"))
b = str(a)
ausgabefeld.insert(END,b+'\n')
Er speichert jetzt zwar den Wert und öffnen tut er in durchaus auch, NUR ÜBERSCHREIBT ER DEN DAVORIGEN WIEDER...
Gerade das soll nicht passieren... er soll es sozusagen "protokollieren"...
Was muss ich machen, dass er es NICHT überschreibt, sondern 'dranhängt'?
mfg
Verfasst: Samstag 3. Juni 2006, 20:27
von murph
ebenso wie in der textdatei= den parameter "w" durch das "a" ersetzen!
das pickle-modul arbeitet im endeffekt genauso wie wenn du das in einer textdatei speicherst, nur dass es für dich handlicher und simpler ist;
außerdem schwerer auszulesen von außen...
(das ist in zeile 7 zu ändern)
Verfasst: Samstag 3. Juni 2006, 21:29
von skunkk90
wenn ich das "w" ind er zeile 7 durch ein "a" ersetze,dann speiert er aber nicht mehr und "aw" oder so funtzt auch nicht
Verfasst: Samstag 3. Juni 2006, 21:47
von Python 47
Das ersetzen von 'w' duch 'a' hat nix mit dem speichern zu tun.
w öffnet die Datei einfach nur zum schreiben und überschreibt die Datei bei jedem neuen öffnen
a öffnet die Datei auch zum schreiben, aber fügt Text beim neuen öffnen einfach dazu!
Sicher das du nichts anderes geändert hast?
Verfasst: Samstag 3. Juni 2006, 22:01
von BlackJack
Auf jeden Fall sollte man pickle Dateien immer als Binärdateien öffnen sonst sind die nicht portabel.
Verfasst: Samstag 3. Juni 2006, 22:08
von skunkk90
BlackJack hat geschrieben:Auf jeden Fall sollte man pickle Dateien immer als Binärdateien öffnen sonst sind die nicht portabel.
was heisst als binärdateien??
ACH JA UND:
wenn ich das "w" durch ein "a" ersetze, dann öffnet er nur noch und schreibt gar nichst mehr (weder so noch überschreibt er etwas)...
Verfasst: Sonntag 4. Juni 2006, 07:01
von gerold
Verfasst: Sonntag 4. Juni 2006, 07:08
von gerold
Python Master 47 hat geschrieben:Das ersetzen von 'w' duch 'a' hat nix mit dem speichern zu tun.
w öffnet die Datei einfach nur zum schreiben und überschreibt die Datei bei jedem neuen öffnen
a öffnet die Datei auch zum schreiben, aber fügt Text beim neuen öffnen einfach dazu!
Hi Python Master 47!
Und genau deshalb ist "a" für Pickle nicht verwendbar. Bitte probier deine Tipps doch ab und zu mal selber aus.
Ideal für Pickle ist "wb", damit es keine böse Überraschung durch Zeilenumbrüche innerhalb der gepickelten Datei gibt.
Also "
wb" zum Schreiben und "
rb" zum Lesen.
mfg
Gerold

Verfasst: Sonntag 4. Juni 2006, 07:23
von gerold
skunkk90 hat geschrieben:ACH JA UND:
wenn ich das "w" durch ein "a" ersetze, dann öffnet er nur noch und schreibt gar nichst mehr (weder so noch überschreibt er etwas)...
Hi skunkk90!
Mit "a" wird die Datei immer größer. Allerdings wird immer nur der erste Pickle-Dump der Datei verwendet um die Daten zu rekonstruieren. Das macht "a" für Pickle ziemlich ungeeignet.
Code: Alles auswählen
>>> import pickle
>>> import StringIO
>>> f = StringIO.StringIO()
>>> d = {"Vorname": "Gerold"}
>>> pickle.dump(d, f)
>>> d = {"Vorname": "Bernhard"}
>>> pickle.dump(d, f)
>>> f.seek(0)
>>> f.read()
"(dp0\nS'Vorname'\np1\nS'Gerold'\np2\ns.(dp0\nS'Vorname'\np1\nS'Bernhard'\np2\ns."
>>> f.seek(0)
>>> x = pickle.load(f)
>>> x
{'Vorname': 'Gerold'}
>>>
Wie man aus diesem Beispiel schön erkennen kann, wird nur der erste Dump aus dem Datenstream herausgeholt. Der zweite Dump ist zwar in der Datei, wird aber nicht angerührt.
mfg
Gerold

Verfasst: Sonntag 4. Juni 2006, 07:58
von skunkk90
wenn ich jetzt bei mir in zeile 7 das "w" durch ein"wb" ersetze dann überschreibt er aber wieder... ich glaube ich sollte dazu sagen, dass ich es in einem Scrolledtext öffnen will und anzeigen alssen will...
Verfasst: Sonntag 4. Juni 2006, 11:52
von murph
setze dich mal mit "open" auseinander!
dan wirst du sehen, dass "wb" "überschreibe im binary-modus" heißt!!!
das muss "a+" sein! ("lese und schreibe dazu")
aber da solltest du dir das nochmal durchlesen, einfach googlen
Verfasst: Sonntag 4. Juni 2006, 13:50
von Python 47
gerold hat geschrieben:Und genau deshalb ist "a" für Pickle nicht verwendbar. Bitte probier deine Tipps doch ab und zu mal selber aus.
Ideal für Pickle ist "wb", damit es keine böse Überraschung durch Zeilenumbrüche innerhalb der gepickelten Datei gibt.
Also "wb" zum Schreiben und "rb" zum Lesen.
Hallo Gerold,
ich muss dazu sagen, dass ich mich nicht so viel mit dem Pickle Modul beschäftige, da ich, bei dem was ich mit Datein machen, ganz gut ohne Pickle auskomme.
Daher war mein Tipp nicht auf das Pickle Modul bezogen, sondern auf arbeiten mit Datein ohne das Pickle Modul.
Gruß Thomas!

Verfasst: Sonntag 4. Juni 2006, 14:42
von gerold
Hi!
Hier habe ich ein paar Möglichkeiten zum Speichern von Daten zusammengefasst:
http://www.python-forum.de/post-37898.html#37898
Vielleicht interessiert es jemanden aus diesem Thread.
mfg
Gerold

Verfasst: Sonntag 4. Juni 2006, 15:08
von Python 47
Danke, werd es mir mal anschauen, auch wenn ich denk ich mal schon 90% davon weiß!
