Seite 1 von 1

Benutzer datei erstellen und lesen.

Verfasst: Freitag 23. November 2012, 13:39
von Evilsadness
Hallihallo,

ich versuche gerade in python eine "Beutzerverwaltung" zu programmieren. Vorweg: Bin ein absoluter Anfänger in Python also bitte unterlässt eure Kommentare wie: "google doch einfach" oder ähnliches.

Also ich bin soweit, dass ich in Python eine xml-Datei schreibe, indem ich vorweg zum Üben, 2 Benutzer erstellt habe mit den dazugehörigen Passwörter. Die Passwörter brauchen auch noch nicht verschlüsselt sein. Mit dieser Aufgabe will ich mich später beschäfitgen.

Habe nun folgendes geschrieben:

Code: Alles auswählen

#!/usr/bin/env python
# -*- coding: utf8 -*-

import xml.dom.minidom as dom

print ("Datei erstellt")

baum = dom.Document()

#<benutzerverwaltung>
tagBenutzerverwaltung = dom.Element("benutzerverwaltung")

#<benutzer id="1">
tagBenutzer = dom.Element("benutzer")
tagBenutzer.setAttribute("id","1")

#<loginname>
#Marcel
tagLoginname = dom.Element("loginname")
text = dom.Text()
text.data = "Marcel"
tagLoginname.appendChild(text)

#<passwort>
#sag ich nicht
tagPasswort = dom.Element("passwort")
text = dom.Text()
text.data = "sag ich nicht"
tagPasswort.appendChild(text)

#</loginname>
tagBenutzer.appendChild(tagLoginname)

#</passwort>
tagBenutzer.appendChild(tagPasswort)
#</benutzer>
tagBenutzerverwaltung.appendChild(tagBenutzer)
#<benutzer id="1">
tagBenutzer = dom.Element("benutzer")
tagBenutzer.setAttribute("id","2")

#<loginname>
#Marcel
tagLoginname = dom.Element("loginname")
text = dom.Text()
text.data = "Tim"
tagLoginname.appendChild(text)

#<passwort>
#sag ich nicht
tagPasswort = dom.Element("passwort")
text = dom.Text()
text.data = "lalala"
tagPasswort.appendChild(text)

#</loginname>
tagBenutzer.appendChild(tagLoginname)

#</passwort>
tagBenutzer.appendChild(tagPasswort)
#</benutzer>
tagBenutzerverwaltung.appendChild(tagBenutzer)
#</benutzerverwaltung>
baum.appendChild(tagBenutzerverwaltung)

f = open("Benutzerverwaltung2.xml", "w")
baum.writexml(f, "", "\t", "\n")
f.close()
Die Ausgabe ist also:

Code: Alles auswählen

<?xml version="1.0" ?>
<benutzerverwaltung>
	<benutzer id="1">
		<loginname>
			Marcel
		</loginname>
		<passwort>
			sag ich nicht
		</passwort>
	</benutzer>
	<benutzer id="2">
		<loginname>
			Tim
		</loginname>
		<passwort>
			lalala
		</passwort>
	</benutzer>
</benutzerverwaltung>
Die Datei habe ich lediglich nur zum Üben erstellt.
Ich möchte aber, wenn ich das Programm starte, entweder die Option "Einloggen" oder "Registrieren" haben.
Den Code zum "Einloggen" soll erstmal egal sein, weil ich ja erstmal jemanden registrieren will, das heißt ich muss iwie ne Schleife erstellen , die die Datei "Benutzerverwaltung2.xml" erstmal mit allen Benutzer die schonmal erstellt wurden sind ausließt und anschließen durch 2 input Eingaben, einen neunen Benutzer mit einer neuen "id" erstellt und bei fertiger Eingabe die Datei errneut speichert bzw. die alter Überschreibt.

Würde zum schluss der tag "</benutzerverwaltung>" nicht da sein, würde ich quasi den neuen Benutzer immer am Ende dran hängen, jedoch ist das ja nicht der Fall.

Meine Überlegung ist, dass ich die Datei auslese, den Loginname und das Passwort der Bereits erstellten Benutzer in eine Dictionary speichere, dann mit der Inputt Eingabe ein neuen Value mit Key in das dictionary einbinden und dann mit einer Schleife dies in der alten Datei zu überschreiben.

Wäre die Idee gut? Wenn ja könnt Ihr mir bisschen helfen dies in der Tat umzusetzen?
Wenn es ne doofe Idee ist, dann bitte Eure Ideen vorschlagen und eventuell auch hinweise geben, wie ich das in Python umsetzten kann.

Danke danke danke schon mal !!

Re: Benutzer datei erstellen und lesen.

Verfasst: Freitag 23. November 2012, 13:51
von BlackJack
@Evilsadness: Meine Ideen dazu: Wenn schon XML dann nicht mit dem `dom` sondern mit der `etree`-API oder vielleicht sogar mit `lxml.objectify`. Das ist schöner, einfacher, „pythonischer”. Die DOM-API hat ja anscheinend schon schlechten Einfluss auf Deine Namensschreibweise gehabt — in Python ist für die meisten Namen kleinschreibung_mit_unterstrichen üblich und nicht „mixedCase” wie bei Java. Ausnahmen sind Konstenten (KOMPLETT_GROSS) und Klassennamen, die wie in Java geschrieben werden.

Dann solltest Du Dir Funktionen zum lesen und schreiben von den Daten erstellen. Die Daten sollten dabei aus einer passenden Datenstruktur kommen beziehungsweise geschrieben werden. Im einfachsten Fall eine Liste mit einem Wörterbuch pro Benutzer.

Falls XML nicht zwingend nötig ist, würde ich es durch JSON ersetzen. Das ist für diesen Fall einfacher zu handhaben.

Re: Benutzer datei erstellen und lesen.

Verfasst: Freitag 23. November 2012, 13:59
von Evilsadness
Meine Übung dabei sollte mit xml sein, also leider kein JSON.

Zu der Namenbeschreibung: Ich habe mit Absicht die Wöter zusammen geschrieben, da ich parallel zu Python Java lerne und dies da immer so angewendet habe, aber danke für diesen Hinweis.

Code: Alles auswählen

#!/usr/bin/env python
# -*- coding: utf8 -*-

import xml.dom.minidom as dom

print ("Datei erstellt")

baum = dom.Document()

#<benutzerverwaltung>
tag_benutzerverwaltung = dom.Element("benutzerverwaltung")

#<benutzer id="1">
tag_benutzer = dom.Element("benutzer")
tag_benutzer.setAttribute("id","1")

#<loginname>
#Marcel
tag_loginname = dom.Element("loginname")
text = dom.Text()
text.data = "Marcel"
tag_loginname.appendChild(text)

#<passwort>
#sag ich nicht
tag_passwort = dom.Element("passwort")
text = dom.Text()
text.data = "sag ich nicht"
tag_passwort.appendChild(text)

#</loginname>
tag_benutzer.appendChild(tag_loginname)

#</passwort>
tag_benutzer.appendChild(tag_passwort)
#</benutzer>
tag_benutzerverwaltung.appendChild(tag_benutzer)
#<benutzer id="1">
tag_benutzer = dom.Element("benutzer")
tag_benutzer.setAttribute("id","2")

#<loginname>
#Marcel
tag_loginname = dom.Element("loginname")
text = dom.Text()
text.data = "Tim"
tag_loginname.appendChild(text)

#<passwort>
#sag ich nicht
tag_passwort = dom.Element("passwort")
text = dom.Text()
text.data = "lalala"
tag_passwort.appendChild(text)

#</loginname>
tag_benutzer.appendChild(tag_loginname)

#</passwort>
tag_benutzer.appendChild(tag_passwort)
#</benutzer>
tag_benutzerverwaltung.appendChild(tag_benutzer)
#</benutzerverwaltung>
baum.appendChild(tag_benutzerverwaltung)

f = open("Benutzerverwaltung2.xml", "w")
baum.writexml(f, "", "\t", "\n")
f.close()

Re: Benutzer datei erstellen und lesen.

Verfasst: Freitag 23. November 2012, 14:09
von Evilsadness
Suche gerade nach etree im Internet und habe schon gelesen, dass es viel besser ist als dom.

Was genau bedeutet nun eig. "api"?
Ich ändere das mal in Elementtree.

Re: Benutzer datei erstellen und lesen.

Verfasst: Freitag 23. November 2012, 14:30
von sparrow
Du wolltest es zwar nicht, aber du bekommst es trotzdem: http://www.lmgtfy.com/?q=api

Re: Benutzer datei erstellen und lesen.

Verfasst: Freitag 23. November 2012, 14:43
von snafu
Kurz gesagt: API heißt Programmierschnittstelle. Also quasi die Gesamtheit aller Funktionen, Klassen, Methoden, Attribute und Konstanten, die für Zugriff bzw Ausgabe von/nach "außen" bestimmt sind.

Re: Benutzer datei erstellen und lesen.

Verfasst: Freitag 23. November 2012, 15:00
von Evilsadness
danke sehr!!

wenn ich das neue Programm ausführen will, kommt folgendes:

Code: Alles auswählen

Traceback (most recent call last):
  File "C:\Users\Christina\Desktop\Projekt\Benutzerverwaltung3.py", line 3, in <module>
    import elementtree.ElementTree as ET
ImportError: No module named elementtree.ElementTree
ich muss es ja erstmal downloaden auf folgender seite:

http://effbot.org/zone/element-index.htm

Aber wenn ich die .exe downloade kommt folgende fehlermeldung:

Code: Alles auswählen

No Python installation found in the registry.
wie kann ich mein Python regestrieren? bzw. in der regestrie eintragen?

Re: Benutzer datei erstellen und lesen.

Verfasst: Freitag 23. November 2012, 15:13
von BlackJack
@Evilsadness: Die ElementTree-API ist schon in der Python-Standardbibliothek enthalten. Einfach mal in der Dokumentation nachsehen wie das Modul dort heisst.

Wenn Du etwas Externes installieren möchtest oder kannst, dann würde ich zu `lxml` raten. Das bietet zum einen auch die `ElementTree`-API mit einigen Erweiterungen an, und zum anderen `lxml.objectify`.

Re: Benutzer datei erstellen und lesen.

Verfasst: Freitag 23. November 2012, 15:21
von Evilsadness
okay.. musste:

Code: Alles auswählen

import xml.etree.ElementTree as ET
eingeben