Dictionaries speichern

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

Beitragvon gerold » Freitag 21. Dezember 2007, 12:52

Hallo Brafil!

Brafil hat geschrieben:1. Die sternchenimporte hab ich absichtlich gemacht, und dafür gesorgt dass nix kollidiert.

Es gibt Leute, die einen Quellcode mit Sternchenimporten nicht lesen. Einfach deshalb, weil es ein ständiges Hin- und Hergehüpfe ist. Nur um herauszufinden, woher den dieser oder jener Befehl kommt. Ich gehöre auch dazu.

Brafil hat geschrieben:3. Global ist auch extra, weil ein einziges dict verwendet wird.

Wenn man "global" vermeiden kann, dann sollte man es vermeiden. Das funktioniert meist mit einer Umstellung des Programmes. Das möchte ich dir aber nicht unterschlagen: Es gibt auch Fälle (sehr sehr wenige), in denen ein "global" im Code den Code nicht verkompliziert.

Ich habe mir deinen Code nicht angesehen. Deshalb kann ich dir jetzt keine Alternative vorschlagen. Aber meist genügt es, wenn man an Funktionen alles übergibt, was diese zum Arbeiten brauchen. Alles, wirklich alles! Und beim "return" liefert man alles wieder zurück, was außerhalb dieser Funktion gebraucht wird. Eine Funktion sollte (wenn möglich) niemals ein externes Objekt ändern, sondern immer nur die geänderten Objekte mit "return" zurück liefern. Das ist eine Sache der Programmplanung. Aber wie ich schon schrieb: "Ich habe mir deinen Code nicht angesehen." Deshalb kann ich jetzt keinen detaillierteren Vorschlag machen.

Brafil hat geschrieben:4. mylist habe ich ganz am anfang geschrieben, deshalb sollte es so bleiben

Ein Name sollte dem Programmierer wissen lassen, mit was man es zu tun hat. "mylist" für ein Dictionary ist keine gute Idee und sollte geändert werden. Auch wenn man Stunden dafür braucht. Viel besser als "mylist" oder "mydict" wäre ein Name der aussagt, was mit dem Namen verknüpft ist. Als Beispiel: Wenn es Adressen sind, dann wäre z.B. "addresses" angebracht. Ob Dictionary oder Liste ist dann auch egal. Eine gute IDE wie z.B. WingIDE zeigt dir sowiso an, ob es eine Liste oder ein Dictionary ist. Und auch die Attribute...

Brafil hat geschrieben:5. Wie speichert man im Binärmodus?

``my_file = file("filename.dat", "wb")``

Brafil hat geschrieben:PS: mylist ist jetzt mydict

Besser als "mydict" aber noch nicht optimal. Aber das kommt mit der Zeit. ;-)

mfg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Benutzeravatar
Leonidas
Administrator
Beiträge: 16023
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Beitragvon Leonidas » Freitag 21. Dezember 2007, 12:57

Brafil hat geschrieben:1. Die sternchenimporte hab ich absichtlich gemacht, und dafür gesorgt dass nix kollidiert. (Außer Pickle)

Warum beharrst du darauf es falsch zu machen? -> [wiki]Import[/wiki]

Brafil hat geschrieben:5. Wie speichert man im Binärmodus?

Mit ``wb`` als Modus.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
Brafil
User
Beiträge: 40
Registriert: Montag 17. Dezember 2007, 17:51
Wohnort: Istanbul

Beitragvon Brafil » Freitag 21. Dezember 2007, 13:02

gerold hat geschrieben:Hallo Brafil!...

import kann ich verändern. :evil: außer Tkinter
return hatte ich nie richtig kapiert, dsehalb wusste ich nicht, dass es noch mehr müglichkeiten gibt.
es speichert jetzt auch im .dat format, allerdings muss der benutzer filename.dat eingeben, also es ist nicht automatisch, aber es funktioniert.
Python + Blender = Super

"Le Python mangera Tout"

The Python is gonna eat everything

(Except for Java, there are too many fans)
Brafil
User
Beiträge: 40
Registriert: Montag 17. Dezember 2007, 17:51
Wohnort: Istanbul

Beitragvon Brafil » Freitag 21. Dezember 2007, 13:13

Import is jetzt geregelt, außer Tkinter, das ist immer noch mit *
Python + Blender = Super



"Le Python mangera Tout"



The Python is gonna eat everything



(Except for Java, there are too many fans)
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5554
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Telfs (Tirol)
Kontaktdaten:

Beitragvon gerold » Freitag 21. Dezember 2007, 13:31

Brafil hat geschrieben:allerdings muss der benutzer filename.dat eingeben

Hallo Brafil!

Auch dafür gibt es eine einfache Lösung:

Code: Alles auswählen

filename = raw_input("Bitte geben Sie den Dateinamen ein: ")
if not filename.lower().endswith(".dat"):
    filename = filename + ".dat"

mfg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs

Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Brafil
User
Beiträge: 40
Registriert: Montag 17. Dezember 2007, 17:51
Wohnort: Istanbul

Beitragvon Brafil » Freitag 21. Dezember 2007, 13:35

Leider nicht: Ich benutze GUI und das tkFileDialog modul
Python + Blender = Super



"Le Python mangera Tout"



The Python is gonna eat everything



(Except for Java, there are too many fans)
Benutzeravatar
BlackVivi
User
Beiträge: 762
Registriert: Samstag 9. Dezember 2006, 14:29
Kontaktdaten:

Beitragvon BlackVivi » Freitag 21. Dezember 2007, 13:37

Brafil hat geschrieben:Leider nicht: Ich benutze GUI und das tkFileDialog modul
Und was is' daran anders oO''... Am Ende kommt'n String heraus, den du überprüfen musst.
Benutzeravatar
Leonidas
Administrator
Beiträge: 16023
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Beitragvon Leonidas » Freitag 21. Dezember 2007, 13:37

Brafil hat geschrieben:Import is jetzt geregelt, außer Tkinter, das ist immer noch mit *

Warum? ``import Tkinter as tk`` und dann einfach alle Tkinter-namen mit ``tk.`` prefixen. So ist auch sofort ersichtlich woher die kommen und wozu die gehören.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
Brafil
User
Beiträge: 40
Registriert: Montag 17. Dezember 2007, 17:51
Wohnort: Istanbul

Beitragvon Brafil » Freitag 21. Dezember 2007, 13:40

Und ein Prog das daraus ein Runtime macht wäre auch nicht schlecht(Aber die meisten verstehe ich nicht)
PS: Ich brauche einen geeigneten Layoutmanager
Python + Blender = Super



"Le Python mangera Tout"



The Python is gonna eat everything



(Except for Java, there are too many fans)
Benutzeravatar
Leonidas
Administrator
Beiträge: 16023
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Beitragvon Leonidas » Freitag 21. Dezember 2007, 13:56

Brafil hat geschrieben:Und ein Prog das daraus ein Runtime macht wäre auch nicht schlecht(Aber die meisten verstehe ich nicht)

py2exe, cxFreeze, PyInstaller. Aber das ist eine Gelegenheit einen neuen Thread zu starten, ja?
My god, it's full of CARs! | Leonidasvoice vs Modvoice
Brafil
User
Beiträge: 40
Registriert: Montag 17. Dezember 2007, 17:51
Wohnort: Istanbul

Beitragvon Brafil » Freitag 21. Dezember 2007, 17:16

Ich habe jetzt grid benutzt. Ist auch nicht so anders, und es zeigt die liste jetzt in einem Text-widget an, nicht in einem PopUp menü
Python + Blender = Super



"Le Python mangera Tout"



The Python is gonna eat everything



(Except for Java, there are too many fans)
Brafil
User
Beiträge: 40
Registriert: Montag 17. Dezember 2007, 17:51
Wohnort: Istanbul

Beitragvon Brafil » Samstag 22. Dezember 2007, 10:26

Jetzt habe ich wieder ein Problem...
Wie kriege ich es ohne global hin, dass mydict leer wird?
Python + Blender = Super



"Le Python mangera Tout"



The Python is gonna eat everything



(Except for Java, there are too many fans)
BlackJack

Beitragvon BlackJack » Samstag 22. Dezember 2007, 11:11

In der Doku nachlesen was Dictionaries für Methoden bieten. :-)
Brafil
User
Beiträge: 40
Registriert: Montag 17. Dezember 2007, 17:51
Wohnort: Istanbul

Save File problem

Beitragvon Brafil » Samstag 22. Dezember 2007, 12:07

Now I have a problem again... It doesn't save or load any files...

Code: Alles auswählen

def Loadfile():
    """Loads a file"""
    namefile = tkFileDialog.askopenfilename(defaultextension='*.dat')

    #Tries to open the file
    try:
        fopen = open(namefile)
        mydict = pickle.load(fopen)
        fopen.close()
        #Display a message
        tkMessageBox.showinfo("Load File", "File has been loaded successfully")

    #If it can't
    except:

        #Show error message
        tkMessageBox.showerror("Error", "Couldn't open file")

    return mydict

def Savefile():
    """Saves the file"""
   
    #Choose the place where to save to
    savefiled = tkFileDialog.asksaveasfilename(defaultextension="*.dat")

    #If the name doesn't end with '.dat', add it
    if not savefiled.lower().endswith(".dat"):
        savefiled = savefiled + ".dat"
   
    fsave = open(savefiled, "w")
    pickle.dump(mydict, fsave)
    #Display a message
    tkMessageBox.showinfo("Save File", "File has
Python + Blender = Super



"Le Python mangera Tout"



The Python is gonna eat everything



(Except for Java, there are too many fans)
Brafil
User
Beiträge: 40
Registriert: Montag 17. Dezember 2007, 17:51
Wohnort: Istanbul

Beitragvon Brafil » Samstag 22. Dezember 2007, 12:40

Das Prog ist fast fertig :D , nur das runtime/exe erzeugen krieg ich net hin... :?
Python + Blender = Super



"Le Python mangera Tout"



The Python is gonna eat everything



(Except for Java, there are too many fans)

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder