2016-01-14 3 views
1

Я начинаю в питоне. Я борюсь с проблемой, которая объясняется ниже. Я также использую незавершенный скрипт python, который не работает для этой проблемы. Я был бы признателен, если бы получил поддержку или инструкцию для моего скрипта.Выдержка из матча до следующего матча, если patten найден между

файла выглядит следующим образом:

<Iteration> 
    <Iteration_hit>Elememt1 Element1 
    abc1 hit 1 
    . 
    . 
</Iteration> 
<Iteration> 
    <Iteration_hit>Elememt2 Element2 
    abc2 hit 1 
    . 
    . 
</Iteration> 
<Iteration> 
    <Iteration_hit>Elememt3 Element3 
    abc3 hit 1 
    . 
    . 
</Iteration> 
<Iteration> 
    <Iteration_hit>Elememt4 Element4 
    abc4 hit 1 
    . 
    . 
</Iteration> 

мне нужно от <Iteration> к </Iteration> для списка элементов матча, что означает для ELEMENT2 и element4 выходной файл должен выглядеть следующим образом:

<Iteration> 
    <Iteration_hit>Elememt2 Element2 
    abc2 hit 1 
    . 
    . 
</Iteration> 
<Iteration> 
    <Iteration_hit>Elememt4 Element4 
    abc4 hit 1 
    . 
    . 
</Iteration> 

Script

#!/usr/bin/python 
x = raw_input("Enter your xml file name: ") 
xml = open(x) 
l = raw_input("Enter your list file name: ") 
lst = open(l) 
Id = list() 
ylist = list() 
import re 
for line in lst: 
     stuff=line.rstrip() 
     stuff.split() 
     Id.append(stuff) 
for ele in Id: 
     for line1 in xml: 
       if line1.startswith(" <Iteration_hit>"): 
         y = line1.split() 
#      print y[1] 
         if y[1] == ele: break 
+1

Вы знаете, что там это библиотеки для чтения/записи xml-файлов, правильно? – tglaria

+0

Не используйте регулярные выражения для синтаксического анализа XML. Python поставляется с пакетом 'xml' только для этой цели. –

+0

Спасибо ... Я не знал ... я попробую с библиотеками – kashiff007

ответ

0

Не рекомендуется использовать regex для анализа XML - вы должны использовать библиотеку, такую ​​как lxml, которую вы можете установить с помощью pip install lxml. Затем, вы можете выбрать соответствующие элементы для вывода с помощью lxml и XPath следующим образом (я взял на себя смелость закрытия <Iteration_hit> тегов в XML):

content = ''' 
<root> 
<Iteration> 
    <Iteration_hit>Elememt1 Element1 
    abc1 hit 1 
    </Iteration_hit> 
</Iteration> 
<Iteration> 
    <Iteration_hit>Elememt2 Element2 
    abc2 hit 1 
    </Iteration_hit> 
</Iteration> 
<Iteration> 
    <Iteration_hit>Elememt3 Element3 
    abc3 hit 1 
    </Iteration_hit> 
</Iteration> 
<Iteration> 
    <Iteration_hit>Elememt4 Element4 
    abc4 hit 1 
    </Iteration_hit> 
</Iteration> 
</root> 
''' 

from lxml import etree 

tree = etree.XML(content) 
target_elements = tree.xpath('//Iteration_hit[contains(., "Element2") or contains(., "Element4")]') 

for element in target_elements: 
    print(etree.tostring(element)) 

Выходных

<Iteration_hit>Elememt2 Element2 
    abc2 hit 1 
    </Iteration_hit> 

<Iteration_hit>Elememt4 Element4 
    abc4 hit 1 
    </Iteration_hit> 
+0

спасибо .... это работает – kashiff007

+0

Рад помочь, и добро пожаловать в Stack Overflow. Если этот ответ или любой другой решают вашу проблему, отметьте его как принятый. – gtlambert

0

Здесь является желаемым полным скриптом для анализа xml через Python

#!/usr/bin/python 
from lxml import etree 

with open('input.xml', 'r') as myfile: 
    content=myfile.read().replace('\n', '\n') 


lst = open('ID.list') 
Id = list() 
for line in lst: 
    stuff=line.rstrip() 
    stuff.split() 
    Id.append(stuff) 
for ele in Id: 
    tree = etree.XML(content) 
    target_elements = tree.xpath('//Iteration[contains(., ele)]') 

for element in target_elements: 
    print(etree.tostring(element)) 
Смежные вопросы