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

jo klasse, funktioniert

Beitragvon sliwalker » Mittwoch 2. Juli 2003, 13:01

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
Benutzeravatar
Beyond
User
Beiträge: 227
Registriert: Freitag 6. September 2002, 19:06
Kontaktdaten:

Beitragvon Beyond » Mittwoch 2. Juli 2003, 14:22

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

schwer zu verstehen

Beitragvon sliwalker » Mittwoch 2. Juli 2003, 16:22

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:
Benutzeravatar
Dookie
Python-Forum Veteran
Beiträge: 2010
Registriert: Freitag 11. Oktober 2002, 18:00
Wohnort: Salzburg
Kontaktdaten:

Beitragvon Dookie » Mittwoch 2. Juli 2003, 17:13

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

superklasse!vielen herzlichen dank

Beitragvon sliwalker » Mittwoch 2. Juli 2003, 18:57

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:
Benutzeravatar
Dookie
Python-Forum Veteran
Beiträge: 2010
Registriert: Freitag 11. Oktober 2002, 18:00
Wohnort: Salzburg
Kontaktdaten:

Beitragvon Dookie » Mittwoch 2. Juli 2003, 20:37

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
Benutzeravatar
Beyond
User
Beiträge: 227
Registriert: Freitag 6. September 2002, 19:06
Kontaktdaten:

Beitragvon Beyond » Donnerstag 3. Juli 2003, 12:08

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

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

Beitragvon NEBULA » Donnerstag 3. Juli 2003, 12:29

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 ? ;)
Benutzeravatar
Dookie
Python-Forum Veteran
Beiträge: 2010
Registriert: Freitag 11. Oktober 2002, 18:00
Wohnort: Salzburg
Kontaktdaten:

Beitragvon Dookie » Donnerstag 3. Juli 2003, 12:51

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

Beitragvon Gast » Donnerstag 3. Juli 2003, 14:06

@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 ;)
Benutzeravatar
NEBULA
User
Beiträge: 25
Registriert: Mittwoch 5. März 2003, 11:59
Wohnort: Kleve/NRW

Beitragvon NEBULA » Donnerstag 3. Juli 2003, 14:07

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

Lösung ohne Dictionary

Beitragvon sliwalker » Donnerstag 3. Juli 2003, 14:20

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

Wer ist online?

Mitglieder in diesem Forum: Bing [Bot]