Python条件移除元素



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

从本质上讲,我的逻辑是这样的,找到术语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的文件上尝试它时,它似乎通常有效,但有时会崩溃,因为x不在列表中。

有什么建议吗?

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

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

因此,term在任何循环之前都是一个变量,但随后在内部for循环中重复使用该名称。

最新更新