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.
import string
import codecs
import sys
from xml.etree import ElementTree as et
def parser(flag):
if flag == "u":
text = message.find("VUser").text
elif flag == "a":
text = message.find("Agent").text
elif flag == "m":
text = message.find("Text").text
#elif flag == "p":
#text = message.find("").text
elif flag == "t":
text = message.find("Transaction").text
elif flag == "s":
text = message.find("Script").text
else:
print "Parameter nicht vorhanden"
sys.exit()
yield text
def main():
try:
argument1 = sys.argv[1]
except IndexError:
argument1="hilfe"
try:
argument2 = sys.argv[2]
except IndexError:
argument2 = "leer"
try:
argument3 = sys.argv[3]
except IndexError:
argument3 = "leer"
if "line" not in argument1:
argument1="hilfe"
argument1 = argument1.lower()
if "hilfe" in argument1:
print "Das ist die Hilfe"
print "Bitte Porgramm mit den entsprechenden Parameter Aufrufen"
print "Mit dem Parameter 'line:' und danach mit den Argumenten pro Zeile"
print "Datum und Zeit werden immer mit angeben"
print "u User"
print "a Agent"
print "m Message"
print "p Profile"
print "t Transporter"
print "s Sicher"
print "Beispiel XMLparserdeluxe.py line:a"
sys.exit()
files = file("detailedReport.xml", "r")
etree = et.parse(files)
files.close()
out_file = codecs.open("detailedReport.csv", "w", "utf-8")
root_tag = etree.getroot()
for messagelist in root_tag.findall("MessageList"):
for message in messagelist.findall("Message"):
time = message.find("Time").text
time = time.replace(" ",";")
if argument3 is not "leer":
argument3 = argument3.lower()
argument3 = argument3.strip("line:")
text = parser(argument3)
text = text.strip()
out_file.write("%s;%s;1" % (time, text) + "\r\n")
if argument2 is not "leer":
argument2 = argument2.lower()
argument2 = argument2.strip("line:")
text = parser(argument2)
text = text.strip()
out_file.write("%s;%s;1" % (time, text) + "\r\n")
argument1 = argument1.lower()
argument1 = argument1.strip("line:")
text = parser(argument1)
text = text.strip()
out_file.write("%s;%s;1" % (time, text) + "\r\n")
out_file.close()
The Hit-Man hat geschrieben:Ich würde was fertiges nehmen. Ich nutze BeautifulSoup, für HTML Seiten, zum parsen. Glaube das kann auch locker XML.
Und ElementTree ist nicht ein vollwertiger XML-Parser? Die Empfehlung ist zudem seltsam, da BeautifulSoup eben kein XML-Parser ist sondern ein HTML-Scaper.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
ja manchmal steh ich echt auf dem Schlauch. Der XML Parser ist ja eine erweiterung von dem Programm was ich vorher geschrieben hatte und ElementTree ist sehr gut.
import string
import codecs
import sys
from xml.etree import ElementTree as et
def parser(flag):
if flag == "u":
text = message.find("VUser").text
elif flag == "a":
text = message.find("Agent").text
elif flag == "m":
text = message.find("Text").text
#elif flag == "p":
#text = message.find("").text
elif flag == "t":
text = message.find("Transaction").text
elif flag == "s":
text = message.find("Script").text
else:
print "Parameter nicht vorhanden"
sys.exit()
yield text
def main():
try:
argument1 = sys.argv[1]
except IndexError:
argument1="hilfe"
try:
argument2 = sys.argv[2]
except IndexError:
argument2 = "leer"
try:
argument3 = sys.argv[3]
except IndexError:
argument3 = "leer"
if "line" not in argument1:
argument1="hilfe"
argument1 = argument1.lower()
if "hilfe" in argument1:
print "Das ist die Hilfe"
print "Bitte Porgramm mit den entsprechenden Parameter Aufrufen"
print "Mit dem Parameter 'line:' und danach mit den Argumenten pro Zeile"
print "Datum und Zeit werden immer mit angeben"
print "u User"
print "a Agent"
print "m Message"
print "p Profile"
print "t Transporter"
print "s Sicher"
print "Beispiel XMLparserdeluxe.py line:a"
sys.exit()
files = file("detailedReport.xml", "r")
etree = et.parse(files)
files.close()
out_file = codecs.open("detailedReport.csv", "w", "utf-8")
root_tag = etree.getroot()
for messagelist in root_tag.findall("MessageList"):
for message in messagelist.findall("Message"):
time = message.find("Time").text
time = time.replace(" ",";")
if argument3 is not "leer":
argument3 = argument3.lower()
argument3 = argument3.strip("line:")
text = parser(argument3)
text = text.strip()
out_file.write("%s;%s;1" % (time, text) + "\r\n")
if argument2 is not "leer":
argument2 = argument2.lower()
argument2 = argument2.strip("line:")
text = parser(argument2)
text = text.strip()
out_file.write("%s;%s;1" % (time, text) + "\r\n")
argument1 = argument1.lower()
argument1 = argument1.strip("line:")
text = parser(argument1)
text = text.strip()
out_file.write("%s;%s;1" % (time, text) + "\r\n")
out_file.close()
main()
Mein Problem ist jetzt das er mir jetzt sowas ausgibt. Sieht mir nach der Speicheradresse aus.
26.06.2008;13:25:49;<generator object at 0x039AE9E0>;1
26.06.2008;13:30:21;<generator object at 0x039AEA08>;1
Du bekommst Generatoren zurück (das kannst du dir wie Listen vorstellen, deren Inhalt erst berechnet wird, wenn man reinschaut - wie Schrödingers Katze etwa), deren String-Darstellung du in die Textdatei speicherst. Du musst den Generator durchiterieren und die Ergebnisse rausholen (``for item in your_generator: ...``).
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Oder vielleicht den Quatsch mit der Generatorfunktion einfach sein lassen. Eine Generatorfunktion die grundsätzlich nur einen Wert liefert ist relativ sinnlos.
Ansonsten kann man die `parse()`-Funktion mit einem Dictionary das Flags auf die zu suchenden Texte abbildet von den ganzen ``elif``\s befreien.
Das eine Funktion im Fehlerfall das ganze Programm abbricht ist ungünstig, da schlecht wiederverwendbar.
Die durchnummerierten Argumentnamen und deren weitere Behandlung im Programm ist sehr unschön. Warum lässt Du die nicht in einer Liste und verarbeitest sie in einer Schleife. Dann kann man sich auch sparen Argumente durch die Zuweisung der Zeichenkette "leer" als nicht existent zu kennzeichnen.
so meint Skript wurde jetzt angepasst und verbessert.
Jetzt hab ich noch ein kleines Problem.
Ich lese ja aus dem XML Tags die Daten aus
<Agent>JamesBond</Agent>
Jetzt meine Frage kann ich auch Informationen aus dem Tag auslesen?
z.B.
in dem Tag Message befindet sich z.b.
<Agent>JamesBond</Agent>
<Profil bla bal bal =Agent007></profil>
Würd ich jetzt gerne Agent007 raus haben