2013-07-10 42 views
0

Python 2.7我用捆綁的elementtree模塊編寫了一些代碼。基於導入模塊的不同代碼結果? (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這樣做,但它爲什麼影響發電機?

回答

1

如果你想迭代器使用iterfind方法,標準庫中findall的執行總是返回一個列表。我不確定您使用的外部版本ElementTree,但看起來this version返回findall而不是列表的迭代器。或許,這將是更安全的呼籲list對返回值:

commands = list(root.findall('{http://clish.sourceforge.net/XMLSchema}' 
       'VIEW/{http://clish.sourceforge.net/XMLSchema}COMMAND')) 

如果這是你需要什麼,它會與這兩個ElementTree實施工作。

+0

就是這樣,非常感謝! – Paul