Laden von riesigen XML-Dateien und Umgang mit MemoryError

8

Ich habe eine sehr große XML-Datei (20GB um genau zu sein, und ja, ich brauche alles). Wenn ich versuche, die Datei zu laden, erhalte ich diesen Fehler:

%Vor%

Dies ist der aktuelle Code, den ich habe, um die XML-Datei zu lesen:

%Vor%

Nun, wie würde ich diesen Fehler beheben und weiter am Skript arbeiten? Ich würde versuchen, die Datei in separate Dateien aufzuteilen, aber da ich nicht weiß, wie sich das auf BeautifulSoup und die XML-Daten auswirken würde, würde ich das lieber nicht tun.

(Die XML-Daten sind ein Datenbank-Dump aus einem Wiki, auf dem ich freiwillig arbeite, um Daten aus verschiedenen Zeiträumen unter Verwendung der direkten Informationen von vielen Seiten zu importieren.)

    
Hairr 17.02.2013, 17:58
quelle

1 Antwort

12

Verwenden Sie nicht BeautifulSoup, um eine so große Parse-XML-Datei zu testen. Verwenden Sie stattdessen die ElementTree-API . Verwenden Sie insbesondere die Funktion iterparse() zum Analysieren Ihre Datei als Stream, behandeln Sie Informationen, wenn Sie über Elemente benachrichtigt werden, und dann löschen Sie die Elemente erneut:

%Vor%

Wenn Sie einen ereignisgesteuerten Ansatz verwenden, müssen Sie das ganze XML-Dokument nicht im Speicher halten. Sie extrahieren nur das, was Sie brauchen, und löschen den Rest.

Siehe iterparse() Tutorial und Dokumentation .

Alternativ können Sie auch die lxml-Bibliothek verwenden. Es bietet die gleiche API in einem schnelleren und umfassenderen Paket.

    
Martijn Pieters 17.02.2013, 18:18
quelle