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

dictionary aus datei laden ?

Beitragvon s1r0b » Freitag 30. Dezember 2005, 18:16

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: 256
Registriert: Dienstag 6. August 2002, 14:36
Kontaktdaten:

Beitragvon XT@ngel » Freitag 30. Dezember 2005, 18:34

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
Benutzeravatar
Rockstar
User
Beiträge: 15
Registriert: Samstag 12. November 2005, 17:31
Kontaktdaten:

Beitragvon Rockstar » Freitag 30. Dezember 2005, 18:47

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

Beitragvon Gast » Freitag 30. Dezember 2005, 18:53

danke für die antworten

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

Beitragvon gerold » Freitag 30. Dezember 2005, 20:24

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

Beitragvon Mawilo » Samstag 31. Dezember 2005, 14:56

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

Beitragvon BlackJack » Samstag 31. Dezember 2005, 22:23

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

Beitragvon mitsuhiko » Samstag 31. Dezember 2005, 23:02

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

Beitragvon Leonidas » Samstag 31. Dezember 2005, 23:14

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 Modvoice
Benutzeravatar
mitsuhiko
User
Beiträge: 1790
Registriert: Donnerstag 28. Oktober 2004, 16:33
Wohnort: Graz, Steiermark - Österreich
Kontaktdaten:

Beitragvon mitsuhiko » Samstag 31. Dezember 2005, 23:30

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

Beitragvon Leonidas » Sonntag 1. Januar 2006, 00:17

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 Modvoice
Benutzeravatar
mitsuhiko
User
Beiträge: 1790
Registriert: Donnerstag 28. Oktober 2004, 16:33
Wohnort: Graz, Steiermark - Österreich
Kontaktdaten:

Beitragvon mitsuhiko » Sonntag 1. Januar 2006, 01:54

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

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder