Python: Extrahieren von Informationen aus xml-Wörterbuch
Muss ich extrahieren von Informationen aus einer xml-Datei zu isolieren, es von der xml-tags vor und nach dem speichern die Informationen in einem Wörterbuch, dann eine Schleife über das dictionary zum drucken einer Liste. Ich bin ein absoluter Anfänger, also ich möchte zu halten es so einfach wie möglich und ich entschuldige mich, wenn, wie ich beschrieben habe, was ich gerne machen würde, macht nicht viel Sinn.
hier ist was ich habe, so weit.
for line in open("/people.xml"):
if "name" in line:
print (line)
if "age" in line:
print(line)
Aktuellen Ausgabe:
<name>John</name>
<age>14</age>
<name>Kevin</name>
<age>10</age>
<name>Billy</name>
<age>12</age>
Gewünschte Ausgabe
Name Age
John 14
Kevin 10
Billy 12
Bearbeiten - Also mit dem code unten bekomme ich die Ausgabe:
{'Billy': '12', 'John': '14', 'Kevin': '10'}
Weiß jemand, wie man von diesem zu einem Diagramm mit Headern wie meine gewünschte Ausgabe?
- Sie sollten mit
xml.dom
. Diese machen Ihr Leben viel einfacher. - Ich brauchen, um mit python, ich bin speziell mit LEERLAUF auf einem mac.
InformationsquelleAutor user1975140 | 2013-01-14
Schreibe einen Kommentar Antworten abbrechen
Du musst angemeldet sein, um einen Kommentar abzugeben.
versuchen xmldict (Konvertieren von xml in python dictionaries, und Umgekehrt.):
oder versuchen xmlmapper (Liste von python-dictionary mit Eltern-Kind-Beziehung):
obige code generator geben. Beim iterieren über Sie; Sie bekommen Informationen
dict
Tasten; wietag
,text
,xmlattb
,tail
und zusätzliche Informationen inxmlinfo
. Hierroot
elementparentid
Informationen wie0
.Verwenden Sie ein XML-parser für diese. Zum Beispiel,
Es scheint mir, dass dies ist eine übung um zu lernen, wie zu Parsen dieses XML-manuell statt Sie einfach ziehen Sie eine Bibliothek aus der Tasche, um es für Sie tun. Wenn ich falsch bin, schlage ich vor, beobachten die udacity-video von Steve Huffman, die hier gefunden werden kann: http://www.udacity.com/view#Course/cs253/CourseRev/apr2012/Unit/362001/Nugget/365002. Er erläutert, wie die minidom-Modul zum analysieren lightweight xml-Dateien wie diese.
Nun, der erste Punkt, den ich machen will in meiner Antwort, ist, dass Sie nicht wollen, erstellen Sie ein python-dictionary drucken alle diese Werte. Ein python-dictionary ist einfach eine Reihe von Tasten, die entsprechen Werte. Es ist keine Bestellung von Ihnen, und so traversal in der Reihenfolge, wie Sie erschienen in der Datei ist ein Schmerz in den Hintern. Sie versuchen, zu drucken Sie alle Namen, die zusammen mit dem entsprechenden Alter, also eine Datenstruktur wie eine Liste von Tupeln wäre wahrscheinlich besser geeignet sein, um sammeln Ihre Daten.
Scheint es, wie die Struktur der xml-Datei ist, dass jeder name-tag ist es gelungen, durch eine Alter-tag, das dem entspricht. Es scheint auch nur einen einzigen Namen pro Zeile. Das macht die Sache ziemlich einfach. Ich werde nicht schreiben, die meisten effiziente und Universelle Lösung für dieses problem, aber stattdessen werde ich versuchen, den code so einfach zu verstehen wie ich kann.
Lassen Sie uns also zuerst eine Liste erstellen, um die Daten zu speichern:
Dann wollen wir uns mal eine Liste erstellen, um die Daten zu speichern:
a_list = []
Nun öffnen Sie die Datei und initialisieren Sie ein paar Variablen zu halten, jeder name und Alter:
Nun für jede Zeile in der Datei, die wir wollten, um zu bestimmen, ob es einen Benutzer enthält. Wenn es funktionierte, wollten wir extrahieren den Namen. Wir erstellen eine Funktion, um dies zu tun:
Nun, wir müssen eine Funktion zum Parsen der Zeile für das Alter des Benutzers. Wir können dies tun, in einer ähnlichen Weise zur vorherigen Funktion, aber wir wissen, dass, sobald wir haben ein Alter, wird es Hinzugefügt in der Liste sofort. Als solche, die wir nie brauchen, beschäftigen uns mit zunehmendem Alter den vorherigen Wert. Die Funktion kann daher wie folgt Aussehen:
Schließlich möchten Sie zum drucken der Liste. Sie könnte es tun, wie folgt:
Hoffe, dass dies geholfen. Ich habe nicht getestet, mein code, so könnte es noch etwas buggy. Die Konzepte sind da, aber. 🙂
Hier ist ein weiterer Weg, mit lxml Bibliothek:
Zur Erhaltung des übergeordneten Knotens, diese stattdessen zu verwenden:
Und wenn Sie wollen, liefern nur einen Teilbaum und konvertieren Sie es in dict, können Sie Element.finden() :
Sehen lxml-Dokumentation.