2015-03-02 3 views
0

Я разбираю большой XML-файл с использованием Python и застревает при удалении элемента. Я проверил логику, как и другой человек, однако по какой-то причине она все еще не работает. По сути, я пытаюсь удалить Непринятые Условия, которые не являются английскими, поскольку мы не требуем их в нашей системе. Таким образом, термин может выглядеть следующим образомPython условное удаление элемента

<Subject> 
<Terms> 
<Non-Preferred_Term> 
<Term_Text>hanging buttress</Term_Text> 
<Term_Language>Dutch</Term_Language> 
</Non-Preferred_Term> 
More terms... 
</Terms> 
</Subject> 

По существу моя логика идет, как это найти термины Element, найти неосновную перспективу, обратите внимание на языке для каждого, и если язык не совпадает с английским, то удалите этот термин.

for terms in term.iterfind ("Terms"): 
    for term in terms.iterfind ("Non-Preferred_Term"): 
     for language in term.iterfind ("Term_Language"): 
      if language.text != ("English"): 
       print (language.text) 
       term.remove (term) 
       print ("term deleted") 

Когда я запускаю скрипт на мой тестовый файл, кажется, работает в том, что я получаю распечатку каждого текста языка, который является не английский, как он работает с последующим термином удален. Однако, когда я смотрю на выходной файл, ни один английский язык не остается в файле. Когда я пытаюсь использовать его в файле 700mb, он, как правило, работает, но иногда вылетает с х, нет в списке.

Любые предложения?

+0

Этот термин term.remove (term) 'выглядит подозрительным. Вы не можете удалить объект из себя ... не так ли? – Sam

+1

@Sam Почему бы и нет? 'Х = []; x.append (х); x.remove (x) 'отлично работает: P Edit: Не сказать, что здесь правильная вещь. –

+0

что моя ошибка действительно должна быть terms.remove (term). Я удаляю детский термин из списка терминов. – ADWALSH

ответ

1

Это скорее всего проблема. У вас есть:

for terms in term.iterfind('Term'): 
    for term in terms: 

Так term переменная перед любым из петель, но тогда вы повторно использовать это имя во внутреннем цикл.

Смежные вопросы