0

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. 何らかの理由で機能が異なります。2 回目のループcommandsでは、ループするものが何もなく、空であることがわかります。したがって、2 番目のループの前に、このコードをもう一度実行して「補充」する必要がありますcommands

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

なぜそうなのか不思議です。インポートされたモジュールはこれにどのように影響しますか? おそらく異なるものをインポートするelementtree.pyとこれが行われますが、なぜジェネレーターに影響を与えるのでしょうか?

4

1 に答える 1

1

標準ライブラリでの の実装は、メソッドfindallを使用するイテレータが必要な場合、常にリストを返しますiterfind。のどの外部バージョンをElementTree使用しているかはわかりませんが、このバージョンfindallはリストではなくイテレータを返すようです。list戻り値を呼び出す方がおそらく安全です。

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

それが必要な場合は、両方のElementTree実装で機能します。

于 2013-07-10T11:01:13.140 に答える