Seite 1 von 1

dictionary aus datei laden ?

Verfasst: Freitag 30. Dezember 2005, 18:16
von s1r0b
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.

Verfasst: Freitag 30. Dezember 2005, 18:34
von XT@ngel
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

Verfasst: Freitag 30. Dezember 2005, 18:47
von Rockstar
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.

Verfasst: Freitag 30. Dezember 2005, 18:53
von Gast
danke für die antworten

@ Rockstar: Werd ich mal probieren

Verfasst: Freitag 30. Dezember 2005, 20:24
von gerold

Verfasst: Samstag 31. Dezember 2005, 14:56
von Mawilo
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

Verfasst: Samstag 31. Dezember 2005, 22:23
von BlackJack
Die Datei zum "picklen" bitte beide male im Binärmodus öffnen, also mit 'wb' bzw 'rb', sonst funktioniert sie nicht plattformübergreifend.

Verfasst: Samstag 31. Dezember 2005, 23:02
von mitsuhiko
Warum mach ich eigentlich Einträge im Wiki ^^
Eintrag unter Python Objekte serialisieren.

Verfasst: Samstag 31. Dezember 2005, 23:14
von Leonidas
blackbird hat geschrieben:Eintrag unter Python Objekte serialisieren.
Huch? cPickle importieren wenn pickle nicht geht?

Edit: pickle <-> cPickle, vorher stand da nur Nonsense.

Verfasst: Samstag 31. Dezember 2005, 23:30
von mitsuhiko
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.

Verfasst: Sonntag 1. Januar 2006, 00:17
von Leonidas
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)

Verfasst: Sonntag 1. Januar 2006, 01:54
von mitsuhiko
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 :-)