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不在列表中崩溃。
有什么建议吗?
答
这很可能是一个参考问题。您有:
for terms in term.iterfind('Term'):
for term in terms:
所以term
是之前任何环路的一个变量,但你在内部重新使用该名称的循环。
这个'term.remove(term)'看起来很可疑。你不能从自己身上移除一个物体......你能吗? – Sam 2015-03-02 17:52:27
@Sam为什么不呢? 'X = []; x.append(X); x.remove(x)'工作得很好:P编辑:不是说这是正确的事情。 – 2015-03-02 17:53:25
我的错误应该是terms.remove(term)。我正在从条款清单中删除子条款。 – ADWALSH 2015-03-03 10:54:49