super danke,
das programm läuft ohne fehler, mit dictionary.
auch wenns vielleicht nervt:
eine letzte frage dazu
kann ich das dictionary dauerhaft speicher?oder
wie schaffe ich es die benutzer + passwörter dauerhaft anzulegen?
ich hoffe nocheinmal auf Deine(Eure) Hilfe
cya sli
jo klasse, funktioniert
Schau Dir mal das Modul shelve an. (Ich hoffe Du hast schon die Python-Doku)
z.B.
Speichert mir mein MainBrowser Object meines Sprachroboters.
z.B.
Code: Alles auswählen
import shelve
store= shelve.open('/opt/speakbot/store')
try:
mainBrowser= store['mainBrowser']
except:
mainBrowser= Browser()
...
...
store['mainBrowser']= mainBrowser
ich glaube ich hab noch nicht genug gelesen um mein problem zu beheben.Beyond hat geschrieben:z.BSchau Dir mal das Modul shelve an. (Ich hoffe Du hast schon die Python-Doku)
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
nur wie erfahre ich das?
bitte nicht mit:
google danach etc. antworten
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
wer schon zu fit in python ist, wird mir solche fragen wahrscheinlich nicht beantworten wollen, weil es unterfordernt ist.
aber trotzdem HILFE
-
- 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
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
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
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
hi.
ich bin echt begeistert 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.
jetzt kommt das nächste projekt, wobei ich ,wenn nötig, hoffentlich wieder hilfe finde.
gruss sli
p.s.: hab literatur zu befehlen und modulen gefunden
ich bin echt begeistert 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.
jetzt kommt das nächste projekt, wobei ich ,wenn nötig, hoffentlich wieder hilfe finde.
gruss sli
p.s.: hab literatur zu befehlen und modulen gefunden
-
- 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:
Achtung, die Dateien der alten Version sind nicht compatibel mit der neuen. Dafür ist die neue flexiebler.
Gruß
Dookie
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
Gruß
Dookie
Warum wollt ihr das dafür vorhandene shelve modul nicht nehmen?
cu beyond
cu beyond
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 ?
-
- 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.
zum eintragen in das Benutzerdictionary
und zum Vergleichen
So kann das Passwort nicht mehr aus dem gespeicherten Dictionary ausgelesen werden.
Gruß
Dookie
@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
Code: Alles auswählen
benutzer["JohnDow"]["Passwort"] = crypted
Code: Alles auswählen
if not crypted == md5.new(benutzer["JohnDow"]["Passwort"]).digest():
print "Passwort stimmt nicht!"
sys.exit(0)
Gruß
Dookie
@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
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
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 )
hi,
ich hab noch ein bisschen rumprobiert nachdem es mit dem dictionary
funktioniert hat.hier ist die lösung ohne dic:
kann man das in weitestem sinne verschlüsseln nennen?
naja wohl eher nicht.
aber bin trotzdem stolz auf den code
cya
sli
cya
sli
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"
naja wohl eher nicht.
aber bin trotzdem stolz auf den code
cya
sli
cya
sli