Python有条件地去除元素

问题描述:

我正在使用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

这很可能是一个参考问题。您有:

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

所以term是之前任何环路的一个变量,但你在内部重新使用该名称的循环。