dictionary aus datei laden ?

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
s1r0b
User
Beiträge: 13
Registriert: Freitag 30. Dezember 2005, 17:57

Hallo,

Ich bin noch relativ unerfahren im umgang mit Python, mache aber zur übung eine art vokabeltrainer.
So sieht das prog aus :

Code: Alles auswählen


vokabel = {"murderer":"Moerder" , "widow":"Witwe" , "add":"hinzufuegen"}

voks = vokabel.items()
punkte = 0
exitstatus = 0

 while exitstatus != 1:

    for evok, dvok in voks:
        eingabe = raw_input(" " + evok + " = ")
    
        if eingabe == dvok:
            punkte += 1
            print "richtig", punkte, "punkt(e)"
            
            exitstatus = 0

        elif eingabe == "exit":
            exitstatus = 1
            break
    
        else:
            print "leider falsch", punkte, "punkt(e)"

Nun möchte ich aber die vokabelliste in form eines dictionarys in eine datei auslagern.
Mein problem liegt nun darin, dass mit zb.:

vokabel = open("vokabel.txt") # Inhalt der datei ist das obrige dictionary

der inhalt nicht als dictionary sondern nur als string geladen wird. Demnach funktioniert dann vokabel.items() auch nicht.

Woran liegt das ? Wie kann man mein problem lösen?

Edit (BlackJack): Code in Python-Tags gesetzt.
XT@ngel
User
Beiträge: 255
Registriert: Dienstag 6. August 2002, 14:36
Kontaktdaten:

Hallo und willkommen :)
Das Dict wird wohl einfach in die Text Datei geschrieben oder?

>> write(MyDict)

Das was Du brauchst nennt sich "serialization" .
Schau dir mal die beiden Module shelve oder cPickle an.

MfG
Andreas
Rockstar
User
Beiträge: 15
Registriert: Samstag 12. November 2005, 17:31
Kontaktdaten:

Hi.
Ich würde das ganze eigentlich anders angehen.
Ich würde die Datei in etwa so aufbauen:

Code: Alles auswählen

murderer=Moerder
widow=Witwe
add=hinzufuegen
Und bei Programmstart die Datei Zeilenweise auslesen, am = jede Zeile aufsplitten und somit dann das Dict füttern.
Dadurch wirds dann eventuell auch einfacher die Datei zu bearbeiten.
Gast

danke für die antworten

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

http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Benutzeravatar
Mawilo
User
Beiträge: 452
Registriert: Sonntag 22. Februar 2004, 10:58
Wohnort: Sachsen
Kontaktdaten:

Hallo,

wie schon von XT@ngel vorgeschlagen, solltest du das mit pickle (oder cPickle - ist schneller) machen. Du speicherst das Dictionary in eine Datei ab.

Code: Alles auswählen

import cPickle

def writeDic:
    f = file('meinDic','w')
    cPickle.dump(vokabel,f)
    f.close()
Danach kannst du das Dic auch wieder laden:

Code: Alles auswählen

def loadDic:
    f = file('meinDic','r')
    vokabel = cPickle.load(f)
    f.close()
Nach dem Laden steht das Dic sofort wieder zur Verfügung. Das ist aus meiner Sicht besser als eine Textdatei zeilenweise auszulesen und daraus wieder ein Dictionary zu erstellen.

Stephan
BlackJack

Die Datei zum "picklen" bitte beide male im Binärmodus öffnen, also mit 'wb' bzw 'rb', sonst funktioniert sie nicht plattformübergreifend.
mitsuhiko
User
Beiträge: 1790
Registriert: Donnerstag 28. Oktober 2004, 16:33
Wohnort: Graz, Steiermark - Österreich
Kontaktdaten:

Warum mach ich eigentlich Einträge im Wiki ^^
Eintrag unter Python Objekte serialisieren.
TUFKAB – the user formerly known as blackbird
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

blackbird hat geschrieben:Eintrag unter Python Objekte serialisieren.
Huch? cPickle importieren wenn pickle nicht geht?

Edit: pickle <-> cPickle, vorher stand da nur Nonsense.
Zuletzt geändert von Leonidas am Samstag 31. Dezember 2005, 23:55, insgesamt 2-mal geändert.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
mitsuhiko
User
Beiträge: 1790
Registriert: Donnerstag 28. Oktober 2004, 16:33
Wohnort: Graz, Steiermark - Österreich
Kontaktdaten:

Leonidas hat geschrieben:
blackbird hat geschrieben:Eintrag unter Python Objekte serialisieren.
Huch? pickle importieren wenn cPickle nicht geht?
Für den Fall, dass es kein cPickle gibt ^^ Weiß nicht obs den gibt.
TUFKAB – the user formerly known as blackbird
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

blackbird hat geschrieben:Für den Fall, dass es kein cPickle gibt ^^ Weiß nicht obs den gibt.
Nein, andersrum. Du importiertst cPickle, wenn es pickle nicht gibt. Ich denke, dass wenn es kein pickle gibt, dass es cPickle erst rech nicht geben wird.

Und: frohes neues Jahr 2006, das ist mein erster Post diesjahr hier 8)
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
mitsuhiko
User
Beiträge: 1790
Registriert: Donnerstag 28. Oktober 2004, 16:33
Wohnort: Graz, Steiermark - Österreich
Kontaktdaten:

Leonidas hat geschrieben:
blackbird hat geschrieben:Für den Fall, dass es kein cPickle gibt ^^ Weiß nicht obs den gibt.
Nein, andersrum. Du importiertst cPickle, wenn es pickle nicht gibt. Ich denke, dass wenn es kein pickle gibt, dass es cPickle erst rech nicht geben wird.

Und: frohes neues Jahr 2006, das ist mein erster Post diesjahr hier 8)
Argh. Fixed :-)
TUFKAB – the user formerly known as blackbird
Antworten