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

Daten wieder laden und anzeigen?

Beitragvon skunkk90 » Samstag 3. Juni 2006, 13:04

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

Beitragvon Python 47 » Samstag 3. Juni 2006, 14:05

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 :-)
Benutzeravatar
Leonidas
Administrator
Beiträge: 16023
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Re: Daten wieder laden und anzeigen?

Beitragvon Leonidas » Samstag 3. Juni 2006, 16:31

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

Beitragvon skunkk90 » Samstag 3. Juni 2006, 18:50

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

Beitragvon Joghurt » Samstag 3. Juni 2006, 18:58

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:

Beitragvon murph » Samstag 3. Juni 2006, 20:03

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:

Beitragvon skunkk90 » Samstag 3. Juni 2006, 20:17

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:

Beitragvon murph » Samstag 3. Juni 2006, 20:27

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:

Beitragvon skunkk90 » Samstag 3. Juni 2006, 21:29

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

Beitragvon Python 47 » Samstag 3. Juni 2006, 21: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?
mfg



Thomas :-)
BlackJack

Beitragvon BlackJack » Samstag 3. Juni 2006, 22:01

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:

Beitragvon skunkk90 » Samstag 3. Juni 2006, 22:08

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: 5554
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Telfs (Tirol)
Kontaktdaten:

Beitragvon gerold » Sonntag 4. Juni 2006, 07:01

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: 5554
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Telfs (Tirol)
Kontaktdaten:

Beitragvon gerold » Sonntag 4. Juni 2006, 07:08

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: 5554
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Telfs (Tirol)
Kontaktdaten:

Beitragvon gerold » Sonntag 4. Juni 2006, 07:23

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.

Wer ist online?

Mitglieder in diesem Forum: hatschy