Python条件删除元素

时间:2015-03-02 17:46:14

标签: python celementtree

我正在使用Python解析一个大型XML文件,并坚持删除一个元素。我已经检查了逻辑和另一个人一样,但无论出于什么原因它仍然无法工作。基本上我正在尝试删除非英语的非优惠条款,因为我们不会在我们的系统中要求它们。所以术语可能如下所示

<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不在列表中。

有什么建议吗?

1 个答案:

答案 0 :(得分:1)

这很可能是参考问题。你有:

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

所以term是任何循环之前的变量,但是你会在内部for循环中重复使用该名称。