2010-10-18 15 views
5

Próbuję wykonać proste zadanie w języku Python i jestem nowy w tym języku (jestem C++). Mam nadzieję, że ktoś może wskazać mi właściwy kierunek.Podstawowe wyszukiwanie plików Pythona i operacje we/wy

Problem: Mam plik XML (12 MB) pełen danych, aw pliku znajdują się znaczniki początkowe "xmltag" i znaczniki końcowe "/ xmltag", które reprezentują początek i koniec sekcji danych, które chciałbym wyciągać.

Chciałbym poruszać się po tym otwartym pliku za pomocą pętli i dla każdej instancji znajdź znacznik początkowy i skopiuj dane w sekcji do nowego pliku, aż do znacznika końcowego. Chciałbym to powtórzyć na końcu pliku.

Jestem zadowolony z pliku I/O, ale nie jest to najskuteczniejsza pętla, wyszukiwanie i ekstrakcja danych.

Bardzo podoba mi się wygląd języka i mam nadzieję, że będę bardziej zaangażowany, aby móc zwrócić się do społeczności.

Wielkie dzięki!

Odpowiedz

3

Sprawdź 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 - wielki odpowiedzi. – duffymo

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

niezbyt miły ... – eumiro

+1

fajne jest subiektywne! wymaganie jest proste, wystarczy użyć prostych metod napisanych w języku Python. – ghostdog74

+1

OP nie określił, czy 'xmltag' ma pewne atrybuty. – eumiro

0

Nie trzeba instalować BeautifulSoup, Python zawiera parser ElementTree w swojej standardowej bibliotece.

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

BeautifulSoup odpowiedź jest dobra, ale ten wykonuje się szybciej i nie wymaga zewnętrznej biblioteki:

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') 
Powiązane problemy