2013-05-28 5 views
0

У меня есть большой файл XML, который грубо структурированный (в таком порядке):Python ElementTree: частично разбор большого файла

<document> 
    <interesting_part> 
    ... 
    </interesting_part> 
    <foo> 
    ... 
    60000 lines 
    ... 
    </foo> 
</document> 

Моей программа:

from xml.etree import ElementTree as et 
f=open(path_f) 
tree=et.parse(f) 
f.close() 
# retreive infos from tree... 

Только первые несколько блок интересует меня в файле, но производительность низкая, потому что et.parse() загружает весь файл.

Как загрузить файл только до </interesting_part>?

Я думал, что-то вроде:

class My_Parser(et.XMLParser): 
    ???? 
my_parser = My_Parser() 
tree=et.parse(f, my_parser) 

Благодарим Вас авансом, Эрик.

ответ

4

Используйте iterparse() function вместо этого, и просто прекратить итерации, когда у вас есть то, что вы хотите:

for event, element in et.iterparse(f): 
    if element.tag == 'interesting_part': 
     # `element` is the complete <interesting_part> element, with children 
     # process it 
     break # ends parsing. 
Смежные вопросы