Contar elementos de manera eficiente en un documento XML muy grande usando lxml
Frecuentes
Visto 3,681 veces
3
Tengo un documento XML muy grande (1.8 GB). Me gustaría simplemente encontrar la cantidad de elementos con la etiqueta <Product>
.
Llegué hasta aquí:
context = etree.iterparse('./test.xml', tag='Product')
num_elems = 0
for event, elem in context:
num_elems += 1
print num_elems
Funciona, pero ¿hay una forma más rápida de hacerlo?
1 Respuestas
1
Como esto funciona, supongo que el uso de la memoria no es un problema (iterparse
sí construya un árbol de todo el archivo en la memoria a menos que lo elimine mientras itera sobre los elementos). En ese caso, ahórrese la molestia de iterar y contar en Python y deje que LXML/libxml
manejar eso en C:
tree = etree.parse("./test.xml")
num_elems = tree.xpath("count(//Product)") # note: returns a float
contestado el 22 de mayo de 12 a las 14:05
¿Es esta una mejor manera, que el siguiente código: tree = etree.parse("./test.xml"); products = tree.findall("Product"); num_elems = len(products) if products is not None else None
? - petr krampl
No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas python xml lxml or haz tu propia pregunta.
Creo que estás en el camino correcto, es solo que tienes un archivo xml grande. stackoverflow.com/questions/324214/… - Bob