Análisis de XML grande (30 GB) en CSV (con Python)

Necesito analizar un archivo XML muy grande de 30 GB en CSV. Tengo 15 GB de RAM disponibles. He estado buscando algunas alternativas, por ejemplo, xmltodict, que tiene algún tipo de opción de transmisión, pero esto crea un diccionario, que luego no puedo cargar para guardarlo como un CSV.

¿Qué herramientas están disponibles (preferiblemente en Python) para analizar archivos XML tan grandes a CSV, donde no es posible cargar ni procesar el archivo debido a los límites de RAM?

Respuestas (2)

Una posibilidad es un procesador de transmisión XSLT 3.0, que dadas sus limitaciones significa en la práctica Saxon/C Enterprise Edition (esto tiene un enlace de lenguaje Python).

En realidad, hay una hoja de estilo de CSV a XML publicada como un ejemplo práctico en la especificación XSLT 3.0, pero lamentablemente no hay equivalente para hacer lo contrario. Sin embargo, puede ver el principio en algunas de las respuestas aquí:

https://stackoverflow.com/questions/365312/xml-to-csv-using-xslt

o aquí:

https://stackoverflow.com/questions/15226194/xml-to-csv-using-xslt

Para que el código se pueda transmitir, la restricción clave es que cualquier regla de plantilla o for-eachinstrucción que procese un elemento en particular solo puede realizar un recorrido de los elementos secundarios. Eso significa que no puede, por ejemplo, hacer una pasada del XML de origen para descubrir los nombres de los campos y luego otra pasada para procesar los valores.

Nota: Saxon-EE es un producto comercial y tengo un interés comercial en él.

Vale la pena probar la biblioteca de utilidades XML , suponiendo una estructura XML plana y válida; incluso viene con una utilidad de línea de comando xml2csv.

Dice específicamente:

xmlutils.py es un conjunto de utilidades de Python para procesar archivos xml en serie para convertirlos a varios formatos (SQL, CSV, JSON). Los scripts usan ElementTree.iterparse() para iterar a través de los nodos en un documento XML, por lo que no es necesario cargar todo el DOM en la memoria. Los scripts se pueden usar para procesar archivos XML de gran tamaño (aunque tome mucho tiempo: P) sin problemas de memoria.