Convertir varios miles de archivos .xml en .csv

Estoy buscando una forma de convertir varios miles de archivos .xml en .csv. No he tenido problemas para hacerlo en pequeñas cantidades, pero los datos con los que estoy trabajando están dentro de varios miles de carpetas. Más específicamente, estoy viendo datos de juegos de la MLB en el transcurso de una sola temporada. Cada juego tiene su propia carpeta separada dentro de otras carpetas para el día y el mes. Dentro de cada carpeta de juego hay varios archivos, sin embargo, solo estoy interesado en un archivo .xml llamado inning_all.xml para cada juego. Necesito convertir estos ~2,500 archivos en archivos .csv para que Stata los interprete (stata tiene una función de importación xml incorporada pero es incompatible con estos archivos específicos; se pueden importar después de convertirlos a .csv).

¿Y está buscando un software para hacerlo (de lo contrario, su pregunta está fuera de tema aquí)? ¿Qué sistema operativo, qué precio? También necesitamos ver un ejemplo (parte de) un archivo XML de este tipo y la salida CSV requerida. Una estructura XML jerárquica y una estructura CSV plana no coinciden 'naturalmente'.
El hecho de que todos estén en carpetas diferentes no es muy relevante para la pregunta porque muchas herramientas te permiten recopilarlos en una carpeta. A menos que necesite tener el CSV en las mismas carpetas, o que tengan nombres duplicados y no se puedan cambiar de nombre . Por favor, dilo.
Explique esto "No he tenido problemas para hacerlo en pequeñas cantidades". Para mí, esto suena como si ya tuvieras una aplicación o script que resuelve tus necesidades. ¿Cómo hiciste esta tarea para pequeñas cantidades? ¿Cuál es el problema con su aplicación/script actual?

Respuestas (2)

No ha dicho nada sobre sus limitaciones tecnológicas, pero

(a) la conversión de XML a CSV se realiza fácilmente con cualquier procesador XSLT

(b) Los procesadores XSLT 2.0 como Saxon suelen tener la capacidad de procesar varios archivos en estructuras de directorio mediante las funciones collection() o uri-collection().

La cantidad de archivos no es un problema: procesé cantidades mucho mayores que esta en un minuto o dos, y la implementación de la función collection () de Saxon tiene varios subprocesos, por lo que se escala bien.

Sugeriría usar python con las bibliotecas integradas de análisis os.walk , csv y xml como expat .

  • Gratis, gratis y de código abierto
  • Multiplataforma incluyendo Windows
  • Rápido y fácil de aprender
  • os.walk "recorrerá" un árbol de directorios para encontrar todos los archivos de interés.
  • hay varios analizadores xml, pero es mejor que utilices el superpotente procesamiento de expresiones regulares de la biblioteca re .