Python: использование цикла For для создания словаря вложенных тегов XML для неопределенного уровня вложенности - PullRequest
0 голосов
/ 18 сентября 2018

Я анализирую многие тысячи XML-файлов, каждый из которых обычно содержит более 200 тегов, которые могут сильно различаться. Чтобы сравнить их, я хочу иметь возможность собрать их структуры, а затем сравнить каждый уровень вложенных тегов между различными файлами.

Кажется, что лучше использовать вложенные словари, и этот код громоздок, но он работает для каждого уровня вложенности, который я нахожу и использую.

import xml.etree.ElementTree as ET

strip_ns = lambda xx: str(xx).split('}', 1)[1]
tree = ET.parse('xmlpath.xml')
root = tree.getroot()


tierdict = {}
for tier1 in root:
    tier1var = strip_ns(tier1.tag)
    tierdict[tier1var] = {}
    for tier2 in tier1:
        tier2var = strip_ns(tier2.tag)
        tierdict[tier1var][tier2var] = {}
        for tier3 in tier2:
            tier3var = strip_ns(tier3.tag)
            tierdict[tier1var][tier2var][tier3var] = {}
            for tier4 in tier3:
                tier4var = strip_ns(tier4.tag)
                tierdict[tier1var][tier2var][tier3var][tier4var] = {}

Тем не менее:

  • 1) Есть ли более эффективный способ закодировать это как есть, особенно когда речь идет об идентификации каждого «уровня» / уровня вложенности?

  • 2) Что более важно, есть ли способ сделать такой цикл для вложения неизвестной глубины? Некоторые из этих файлов могут занимать 10 или 20 вложений, и у меня нет возможности проверить их вручную.

...