¿Cómo leerías un archivo XML usando sax y lo convertirías en un elemento lxml etree.iterparse?Python sax a lxml para 80 + GB XML
Para proporcionar una visión general del problema, he creado una herramienta de ingestión de XML utilizando lxml para una fuente XML que tendrá un tamaño de 25 - 500MB que necesita ingestión dos veces al día, pero necesita realizar una Ingestión de una vez de un archivo de 60 a 100 GB.
Había elegido utilizar lxml según las especificaciones que detallaban que un nodo no superaría los 4 -8 GB de tamaño, lo que pensé que permitiría que el nodo se lea en la memoria y se borre cuando haya terminado.
Una visión general si el código está por debajo
elements = etree.iterparse(
self._source, events = ('end',)
)
for event, element in elements:
finished = True
if element.tag == 'Artist-Types':
self.artist_types(element)
def artist_types(self, element):
"""
Imports artist types
:param list element: etree.Element
:returns boolean:
"""
self._log.info("Importing Artist types")
count = 0
for child in element:
failed = False
fields = self._getElementFields(child, (
('id', 'Id'),
('type_code', 'Type-Code'),
('created_date', 'Created-Date')
))
if self._type is IMPORT_INC and has_artist_type(fields['id']):
if update_artist_type(fields['id'], fields['type_code']):
count = count + 1
else:
failed = True
else:
if create_artist_type(fields['type_code'],
fields['created_date'], fields['id']):
count = count + 1
else:
failed = True
if failed:
self._log.error("Failed to import artist type %s %s" %
(fields['id'], fields['type_code'])
)
self._log.info("Imported %d Artist Types Records" % count)
self._artist_type_count = count
self._cleanup(element)
del element
Avísame si puedo añadir cualquier tipo de aclaración.
¿Cuál es la pregunta? ¿Recibió un mensaje de error? –
La pregunta está en la primera oración ... ¿por qué el voto a favor? – Nick
Tu pregunta es un poco extraña. ¿Por qué estás usando SAX en absoluto? iterparse es * una alternativa a * SAX. Podrías generar eventos iterparse desde eventos SAX, pero ¿por qué alguien haría eso? –