Daten wieder laden und anzeigen?

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
skunkk90
User
Beiträge: 57
Registriert: Donnerstag 1. Juni 2006, 20:38
Wohnort: F:\Homeverzeichnis.zip
Kontaktdaten:

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
Python 47
User
Beiträge: 574
Registriert: Samstag 17. September 2005, 21:04

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:

Code: Alles auswählen

y=open('datei.txt', 'r')
z=y.readlines()
print z
Du bekommst zwar eine Liste wieder, aber das kannst du mit dem Modul pickle beheben! :wink:
mfg

Thomas :-)
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

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.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Benutzeravatar
skunkk90
User
Beiträge: 57
Registriert: Donnerstag 1. Juni 2006, 20:38
Wohnort: F:\Homeverzeichnis.zip
Kontaktdaten:

das problem is nur, dass ich nicht weiss was pickle ist, damit habe ich mich noch nicht befasst...
Joghurt
User
Beiträge: 877
Registriert: Dienstag 15. Februar 2005, 15:07

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]
murph
User
Beiträge: 622
Registriert: Freitag 14. April 2006, 19:23
Kontaktdaten:

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...
Benutzeravatar
skunkk90
User
Beiträge: 57
Registriert: Donnerstag 1. Juni 2006, 20:38
Wohnort: F:\Homeverzeichnis.zip
Kontaktdaten:

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
murph
User
Beiträge: 622
Registriert: Freitag 14. April 2006, 19:23
Kontaktdaten:

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)
Benutzeravatar
skunkk90
User
Beiträge: 57
Registriert: Donnerstag 1. Juni 2006, 20:38
Wohnort: F:\Homeverzeichnis.zip
Kontaktdaten:

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
Python 47
User
Beiträge: 574
Registriert: Samstag 17. September 2005, 21:04

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?
mfg

Thomas :-)
BlackJack

Auf jeden Fall sollte man pickle Dateien immer als Binärdateien öffnen sonst sind die nicht portabel.
Benutzeravatar
skunkk90
User
Beiträge: 57
Registriert: Donnerstag 1. Juni 2006, 20:38
Wohnort: F:\Homeverzeichnis.zip
Kontaktdaten:

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)...
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

skunkk90 hat geschrieben:was heisst als binärdateien??
Hi!

http://docs.python.org/lib/built-in-funcs.html#l2h-25
http://docs.python.org/lib/bltin-file-o ... ml#l2h-235

mfg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

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
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

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
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Benutzeravatar
skunkk90
User
Beiträge: 57
Registriert: Donnerstag 1. Juni 2006, 20:38
Wohnort: F:\Homeverzeichnis.zip
Kontaktdaten:

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...
murph
User
Beiträge: 622
Registriert: Freitag 14. April 2006, 19:23
Kontaktdaten:

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
Python 47
User
Beiträge: 574
Registriert: Samstag 17. September 2005, 21:04

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. :wink:

Daher war mein Tipp nicht auf das Pickle Modul bezogen, sondern auf arbeiten mit Datein ohne das Pickle Modul.

Gruß Thomas! :wink:
mfg

Thomas :-)
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

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
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Python 47
User
Beiträge: 574
Registriert: Samstag 17. September 2005, 21:04

Danke, werd es mir mal anschauen, auch wenn ich denk ich mal schon 90% davon weiß! :lol:
mfg

Thomas :-)
Antworten