Vous pouvez utiliser modules xmlsax (Simple API for XML) analyseur.
SAX est un contexte streaming sur XML et le document est traité dans la mode linéaire.
Ceci est avantageux lorsque arbre DOM consomme trop de mémoire implémentations habituelles DOM utilisent 10 octets de mémoire pour représenter 1 octet de XML.
Exemple de code pour faire un peu comme ceci:
import xml.sax
def stream_gz_decompress(stream) :
dec = zlib.decompressobj(32 + zlib.MAX_WBITS)
for chunk in stream :
rv = dec.decompress(chunk)
if rv :
yield rv
class stream_handler(xml.sax.handler.ContentHandler) :
last_entry = None
last_name = None
def startElement(self, name, attrs) :
self.last_name = name
if name == 'item':
self.last_entry = {}
elif name != 'root' and name != 'updated' :
self.last_entry[name] = {'attrs': attrs, 'content': ''}
def endElement(self, name):
if name == 'item':
# YOUR APPLICATION LOGIC GOES HERE
self.last_entry = None
elif name == 'root':
raise StopIteration
def characters(self, content):
if self.last_entry:
self.last_entry[self.last_name]['content'] += content
parser = xml.sax.make_parser()
parser.setContentHandler(stream_handler())
with open(os.path.basename('FILENAME'), "rb") as local_file:
for data in stream_gz_decompress(local_file):
parser.feed(data)
Le code de sortie 137 est le résultat d'un SIGKILL. – Vallentin
Vous pourriez jeter un oeil sur Belle soupe. Leur analyseur lxml est très rapide, et dans un système moderne (4 Go + RAM) vous ne devriez avoir aucun problème à analyser un fichier de 600 Mo. – Mikael