jo klasse, funktioniert

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
sliwalker
User
Beiträge: 21
Registriert: Sonntag 29. Juni 2003, 20:16
Wohnort: Bielefeld

super danke,

das programm läuft ohne fehler, mit dictionary.

auch wenns vielleicht nervt:
eine letzte frage dazu :lol:

kann ich das dictionary dauerhaft speicher?oder
wie schaffe ich es die benutzer + passwörter dauerhaft anzulegen?

ich hoffe nocheinmal auf Deine(Eure) Hilfe :wink:

cya sli
Beyond
User
Beiträge: 227
Registriert: Freitag 6. September 2002, 19:06
Kontaktdaten:

Schau Dir mal das Modul shelve an. (Ich hoffe Du hast schon die Python-Doku)

z.B.

Code: Alles auswählen

import shelve
store= shelve.open('/opt/speakbot/store')
try:
    mainBrowser= store['mainBrowser']
except:
    mainBrowser= Browser()

...
...

store['mainBrowser']= mainBrowser
Speichert mir mein MainBrowser Object meines Sprachroboters.
sliwalker
User
Beiträge: 21
Registriert: Sonntag 29. Juni 2003, 20:16
Wohnort: Bielefeld

Beyond hat geschrieben:z.BSchau Dir mal das Modul shelve an. (Ich hoffe Du hast schon die Python-Doku)
ich glaube ich hab noch nicht genug gelesen um mein problem zu beheben. :(

hab zwar schon ne menge dokus und how-tos durch,aber mir fehlen einfach befehle und module die ich benutzen kann. und die kann ich erst benutzen wenn ich weis was sie bedeuten :cry:

nur wie erfahre ich das?
bitte nicht mit:
google danach etc. antworten :wink:
das hab ich schon durch, ich hab auch neauflistung von einer menge
modulen : ums auf den punkt zu bringen: z.b.:
from time import * ---> was heist sternchen ;
oder variabel = " "
was heist : passwort = "foobar"
usw

solche sache machen mir mehr schwierigkeiten als die art und weise wie man programmiert :oops:

wer schon zu fit in python ist, wird mir solche fragen wahrscheinlich nicht beantworten wollen, weil es unterfordernt ist.
aber trotzdem HILFE :wink:
Dookie
Python-Forum Veteran
Beiträge: 2010
Registriert: Freitag 11. Oktober 2002, 18:00
Wohnort: Salzburg
Kontaktdaten:

Hi sliwalker,

mal auf die schnelle gecodet zum laden und speichern eines Dictionary

Code: Alles auswählen

from xreadlines import xreadlines

dictionary = {
    "Hans" : {"Passwort" : "asdf", "Email" : "ich@Hans.de"},
    "Susi" : {"Passwort" : "qwer", "Email" : ""},
    "Gretel" : {"Passwort" : "yxcv", "Email" : "gretel@aol.com"}
}

def save_dict(filename, dict):
    f = open(filename, "w")
    for key in dict:
        f.write(key)
        f.write("\t") # schreibe Tabulator als trenner
        f.write(dict[key]["Passwort"])
        f.write("\t")
        f.write(dict[key]["Email"])
        f.write("\n") # neue Zeile fuer naechsten datensatz
    f.close()

def load_dict(filename):
    result = {} # leeres Dictionary erzeugen
    f = open(filename, "r")
    for line in xreadlines(f):
        item = line.split("\t")
        result[item[0]] = {"Passwort" : item[1], "Email" : item[2]}
    f.close()
    return result
nun noch zu Deinen Fragen:

das * bei "from xxx import *" bedeutet, daß alle Objekte, die dieses Modul definiert importiert werden und dann direkt verwendet werden können.

"foobar" ist ein Platzhalter, also ein beliebiger Name, Bezeichner, Text, der gerne in Dokumentationen oder Beispielen zur Programmierung verwendet wird. Du kannst "foobar" gleichsetzen mit "irgendwas"

variable = "" - initialisiert eine Variable als String der nichts enthält. in meinem Beispiel initialisiere ich z.B. die Variable result mit {} als leeres Dictionary.


Gruß

Dookie
sliwalker
User
Beiträge: 21
Registriert: Sonntag 29. Juni 2003, 20:16
Wohnort: Bielefeld

hi.

ich bin echt begeistert :P von diesem forum und danke dir dookie nochmal herzlich.
dein beispiel für das speichern eines dictionary ist echt klasse.
es hat mir soweit geholfen,das jeztz alles funktioniert wie ich möchte. 8)

jetzt kommt das nächste projekt, wobei ich ,wenn nötig, hoffentlich wieder hilfe finde. :D

gruss sli
p.s.: hab literatur zu befehlen und modulen gefunden :wink:
Dookie
Python-Forum Veteran
Beiträge: 2010
Registriert: Freitag 11. Oktober 2002, 18:00
Wohnort: Salzburg
Kontaktdaten:

hab noch etwas mit dem Speichern und Laden von Dictionarys rumprobiert:

Code: Alles auswählen

def save_dict(filename, dict):
    f = open(filename, "w")
    f.write(str(dict)) # Dictionary als String speichern
    f.close()

def load_dict(filename):
    f = open(filename, "r")
    data = f.read() # Dictionary als String laden
    return eval(data) # und evaluiert (als Dictionary) zurückgeben
Achtung, die Dateien der alten Version sind nicht compatibel mit der neuen. Dafür ist die neue flexiebler.


Gruß

Dookie
Beyond
User
Beiträge: 227
Registriert: Freitag 6. September 2002, 19:06
Kontaktdaten:

Warum wollt ihr das dafür vorhandene shelve modul nicht nehmen?

cu beyond
NEBULA
User
Beiträge: 25
Registriert: Mittwoch 5. März 2003, 11:59
Wohnort: Kleve/NRW

naja wenn ich nur ein Objekt serialisieren muss reicht Pickle bzw. cPickle ja eigentlich voll und ganz bzw. speichern der String-Repräsentation des Objekts(wuerd ich allerdings niemals nich machen, nix fuer ungut :) ), oder nicht ? ;)
Dookie
Python-Forum Veteran
Beiträge: 2010
Registriert: Freitag 11. Oktober 2002, 18:00
Wohnort: Salzburg
Kontaktdaten:

Hallo,

@Beyond: ich finde das shelve modul, gerade für einen Anfänger, nicht sehr leicht durchschaubar.
@Nebula, was macht pickle den anderes als die __repr__() zu sichern? Kommt bei einem Dictionary aufs gleiche raus, als wenn ich direkt die String-Representation speichere.

Nochwas zum Passwort. Ich würde schon im Dictionary die Passwörter verschlüsselt eintragen und dann, beim Check des Passwortes das eingegebene Passwort auch verschlüsseln und mit dem gespeicherten vergleichen.

Code: Alles auswählen

import md5
passwort = r"foobar" # Passwort als rawstring
crypted = md5.new(r).digest() # verschlüsseln
zum eintragen in das Benutzerdictionary

Code: Alles auswählen

benutzer["JohnDow"]["Passwort"] = crypted
und zum Vergleichen

Code: Alles auswählen

if not crypted == md5.new(benutzer["JohnDow"]["Passwort"]).digest():
    print "Passwort stimmt nicht!"
    sys.exit(0)
So kann das Passwort nicht mehr aus dem gespeicherten Dictionary ausgelesen werden.


Gruß

Dookie
Gast

@dookie
Für die hier gestellte Anforderung reicht das Speichern von __repr__ wie gesagt voll und ganz.
Bei einer Instanz einer eigenen Klasse sieht das aber schon etwas anders aus.

pickle speichert definitiv nicht nur den Inhalt von __repr__ ab ;)
NEBULA
User
Beiträge: 25
Registriert: Mittwoch 5. März 2003, 11:59
Wohnort: Kleve/NRW

grrr mit Einloggen waers huebscher gewesen......vor allen Dingen haette ich da noch hinzufuegen koennen, dass mich bei dem Speichern der String-Repräsentation eigentlich nur das eval stoert(ja paranoid bin ich auch ;) )
sliwalker
User
Beiträge: 21
Registriert: Sonntag 29. Juni 2003, 20:16
Wohnort: Bielefeld

hi,

ich hab noch ein bisschen rumprobiert nachdem es mit dem dictionary
funktioniert hat.hier ist die lösung ohne dic:

Code: Alles auswählen

print "SLI Access"

path="c:/Programme/Programmierplatformen/Python/projecte/"
file="codelist.txt"
datei=path+file
codelist=[]
code=user+pasw

user=raw_input("Username: ")
pasw=raw_input("Passwort: ")
in_file=open(datei,"w")
codelist.append(code)
in_file.close()

print "Jetzt die Abfrage: "
user=raw_input("Username: ")
pasw=raw_input("Passwort: ")
if user+pasw in codelist:
    print "Access granted"
else:
    print "Access denied"
kann man das in weitestem sinne verschlüsseln nennen? :shock:
naja wohl eher nicht.
aber bin trotzdem stolz auf den code :wink:
cya
sli

cya
sli
Antworten