Die itertree-Funktion von python ElementTree verwenden und den modifizierten Baum in die Ausgabedatei schreiben

8

Ich muss eine sehr große (~ 40 GB) XML-Datei analysieren, bestimmte Elemente daraus entfernen und das Ergebnis in eine neue XML-Datei schreiben. Ich habe versucht, iterparse aus Pythons ElementTree zu verwenden, aber ich bin verwirrt darüber, wie man den Baum ändert und dann den resultierenden Baum in eine neue XML-Datei schreibt. Ich habe die Dokumentation auf Itertree gelesen, aber es hat die Dinge nicht geklärt. Gibt es dafür einfache Möglichkeiten?

Danke!

EDIT: Das habe ich bis jetzt.

%Vor%     
LateCoder 14.03.2013, 02:04
quelle

2 Antworten

6

Wenn Sie ein großes xml haben, das nicht in den Speicher passt, könnten Sie versuchen, es einzeln zu serialisieren. Angenommen, <root><page/><page/><page/>...</root> Dokumentstruktur und Ignorieren möglicher Namespace-Probleme:

%Vor%

Dabei gibt keep(page) True zurück, wenn page beibehalten werden soll, z. B.:

%Vor%

Zum Vergleich: Um eine kleine XML-Datei zu ändern, könnten Sie:

%Vor%     
jfs 17.03.2013 03:59
quelle
1

Vielleicht die Antwort auf meine ähnliche Frage kann Ihnen helfen.

Was das Zurückschreiben in eine .xml-Datei angeht, habe ich das am Ende meines Skripts gemacht:

%Vor%

Die Variable doc stammt von meinem Skript, was vergleichbar ist mit tree = ET.iterparse("sample.xml") Ich habe folgendes:

%Vor%

Ich habe lxml anstelle von ElementTree verwendet, aber ich denke, dass der Write-out-Teil noch funktionieren sollte (ich denke, dass es hauptsächlich nur Xpath-Sachen sind, die ElementTree nicht verarbeiten kann.) Ich verwende lxml, importiert mit dieser Zeile:

%Vor%

Hoffentlich kann dies (zusammen mit meiner verknüpften Frage für einen zusätzlichen Code-Kontext, wenn Sie es brauchen) Ihnen helfen!

    
Qanthelas 17.03.2013 02:08
quelle

Tags und Links