Python 2.7我使用捆绑的elementtree模块编写了一些代码。
commands = root.findall('{http://clish.sourceforge.net/XMLSchema}'
'VIEW/{http://clish.sourceforge.net/XMLSchema}COMMAND')
tree_list = []
for command in commands:
tree_list.append(list(command.iter()))
稍后我在代码中做了:
for command in commands:
for i in command:
if "CONFIG" in str(i):
command.remove(i)
tree_list.append(list(command.iter()))
这很好用。但是,我只是自己导入ElementTree.py
进行最小安装,而不是import xml.etree.ElementTree as ET
。
由于某种原因,功能现在不同。第二次循环commands
我注意到没有任何东西要循环,它是空的。因此,在第二个循环之前,我现在必须再次执行此代码以“重新填充”commands
:
commands = root.findall('{http://clish.sourceforge.net/XMLSchema}'
'VIEW/{http://clish.sourceforge.net/XMLSchema}COMMAND')
我想知道为什么会这样?导入的模块如何影响这个?也许导入不同的elementtree.py
这样做了,但为什么它会影响生成器?
答案 0 :(得分:1)
如果您希望迭代器使用findall
方法,则标准库中iterfind
的实现始终返回一个列表。我不确定您使用的是ElementTree
的哪个外部版本,但似乎this version从findall
而不是列表返回迭代器。在返回的值上调用list
可能更安全:
commands = list(root.findall('{http://clish.sourceforge.net/XMLSchema}'
'VIEW/{http://clish.sourceforge.net/XMLSchema}COMMAND'))
如果这是您所需要的,它将适用于ElementTree
个实施。