2010-10-18 8 views
5

Estoy intentando completar una tarea simple en Python y soy nuevo en el lenguaje (soy C++). Espero que alguien pueda señalarme en la dirección correcta.Búsqueda básica de archivos Python y E/S

Tengo un archivo XML (12mb) lleno de datos y dentro del archivo hay etiquetas de inicio 'xmltag' y etiquetas de finalización '/ xmltag' que representan el inicio y el final de las secciones de datos que me gustaría extraer.

Me gustaría navegar a través de este archivo abierto con un bucle y para cada instancia ubicar una etiqueta de inicio y copiar los datos dentro de la sección en un nuevo archivo hasta la etiqueta final. Me gustaría repetir esto al final del archivo.

Estoy satisfecho con la E/S de archivos pero no con los bucles, búsquedas y extracciones de datos más eficientes.

Me gusta mucho el aspecto del idioma y con suerte me involucraré más para poder ayudar a la comunidad.

¡Muchas gracias!

Respuesta

3

Comprobar BeautifulSoup

from BeautifulSoup import BeautifulSoup 

with open('bigfile.xml', 'r') as xml: 
    soup = BeautifulSoup(xml): 
    for xmltag in soup('xmltag'): 
     print xmltag.contents 
+0

+1 - gran respuesta. – duffymo

-2
xml=open("xmlfile").read() 
x=xml.split("</xmltag>") 
for block in x: 
    if "<xmltag>" in block: 
     print block.split("<xmltag>")[-1] 
+0

no muy agradable ... – eumiro

+1

¡agradable es subjetivo! el requisito es simple, usar métodos simples de cadenas de Python es suficiente. – ghostdog74

+1

OP no indicó si 'xmltag' tiene algunos atributos. – eumiro

0

No es necesario instalar BeautifulSoup, Python incluye el analizador ElementTree en su biblioteca estándar.

from xml.etree import cElementTree as ET 
tree = ET.parse('myfilename') 
new_tree = ET('new_root_element') 
for element in tree.findall('.//xmltag'): 
    new_tree.append(tree.element) 
print ET.tostring(new_tree) 
1

La respuesta BeautifulSoup es bueno, pero esto se ejecuta más rápido y no requiere de una biblioteca externa:

import xml.etree.cElementTree as ET 
tree = ET.parse('xmlfile.xml') 
results = (elem for elem in tree.getiterator('xmltag')) 

# in Python 2.7+, getiterator() is deprecated; use tree.iter('xmltag') 
Cuestiones relacionadas