Sto cercando di analizzare * un file di grandi dimensioni (> 5 GB) di dati di markup strutturati. Il formato dei dati è essenzialmente XML ma non esiste un elemento radice esplicito. Qual è il modo più efficace per farlo?Analisi di file pseudo-xml di grandi dimensioni in python
Il problema con i parser SAX è che richiedono un elemento root, quindi o devo aggiungere uno pseudoelemento al flusso di dati (c'è un equivalente a SequenceInputStream di Java in Python?) O devo passare a un parser basato sugli eventi non SAX conforme (esiste un successore di sgmllib?)
La struttura dei dati è piuttosto semplice. Fondamentalmente un elenco di elementi:
<Document>
<docid>1</docid>
<text>foo</text>
</Document>
<Document>
<docid>2</docid>
<text>bar</text>
</Document>
* in realtà per iterare
è 'ritorno ''' davvero la cosa giusta da fare su 'StopIteration'? Come fa un client di quel codice a notare l'EOF se usa solo 'read()' allora? –
Una delle proprietà degli oggetti stream-like in python è che una chiamata read() blocca e restituisce almeno un byte o, in caso di EOF, restituisce una stringa vuota. Ecco come funziona il metodo file.read originale. – liori
Si potrebbe desiderare di utilizzare questo in combinazione con PullDOM - combina la natura di streaming di SAX con la natura gerarchica di DOM. – RichieHindle