J'essaye d'analyser * un gros fichier (> 5 Go) de données de balisage structurées. Le format de données est essentiellement XML mais il n'y a pas d'élément racine explicite. Quel est le moyen le plus efficace de le faire? Le problème avec les parseurs SAX est qu'ils nécessitent un élément racine, donc soit je dois ajouter un pseudo-élément au flux de données (y a-t-il un équivalent à SequenceInputStream de Java en Python?), Soit je dois passer à un analyseur basé sur les événements non conforme à SAX (existe-t-il un successeur de sgmllib?)Analyse de gros fichiers pseudo-xml en python
La structure des données est assez simple. Fondamentalement, une liste des éléments:
<Document>
<docid>1</docid>
<text>foo</text>
</Document>
<Document>
<docid>2</docid>
<text>bar</text>
</Document>
* en fait itérer
est 'retour ''' vraiment la bonne chose à faire sur 'StopIteration'? Comment un client de ce code pourrait-il remarquer l'EOF s'il utilisait seulement 'read()' alors? –
L'une des propriétés des objets de type flux dans python est qu'un appel read() bloque et retourne au moins un octet, ou dans le cas d'EOF, renvoie une chaîne vide. C'est ainsi que fonctionne la méthode originale file.read. – liori
Vous pouvez utiliser ceci en conjonction avec PullDOM - il combine la nature de streaming de SAX avec la nature hiérarchique de DOM. – RichieHindle