2015-03-02 76 views
0

我正在使用Python解析一個大的XML文件,並堅持刪除一個元素的條件。我已經檢查過邏輯和其他人一樣,但無論出於何種原因,它仍然不起作用。基本上,我試圖刪除非英語的非優先條款,因爲我們不需要在我們的系統中使用它們。所以,一個術語可能像下面Python有條件地去除元素

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

本質上我的邏輯是這樣認爲稱呼元素,發現非首選的長期,查看每個語言,如果語言不匹配,那麼英語刪除該術語。

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文件上嘗試它時,它似乎一般工作,但有時x不在列表中崩潰。

有什麼建議嗎?

+0

這個'term.remove(term)'看起來很可疑。你不能從自己身上移除一個物體......你能嗎? – Sam 2015-03-02 17:52:27

+1

@Sam爲什麼不呢? 'X = []; x.append(X); x.remove(x)'工作得很好:P編輯:不是說這是正確的事情。 – 2015-03-02 17:53:25

+0

我的錯誤應該是terms.remove(term)。我正在從條款清單中刪除子條款。 – ADWALSH 2015-03-03 10:54:49

回答

1

這很可能是一個參考問題。您有:

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

所以term是之前任何環路的一個變量,但你在內部重新使用該名稱的循環。