Python - ETree element.find на частичное совпадение

1

ниже фрагмент кода проходит через несколько XML файлов и вытягивает 3 "столбца" в словаре из каждого. Одно из xmls имеет первое поле с немного отличающимся "IndexName", а не "IndexID". как это сделать, я уйду с одним списком полей, например

field_list = ['Index*', 'CompositeSpread', 'CompositePrice',]

найти частичное совпадение:

strXpath = "./row"

field_list = ['IndexID', 'CompositeSpread', 'CompositePrice',]
field_list1 = ['IndexName', 'CompositeSpread', 'CompositePrice',]

tree = ET.parse(file_path)
root = tree.getroot()

value_list = []
for el in root.findall(strXpath):
    value_list.append([el.find(x).text for x in field_list])
Теги:
elementtree

1 ответ

0

в решении, которое я придумал, использовалось как 'IndexID' и 'IndexName' в field_list и проверка того, if el.find(x) is not None в понимании списка:

import xml.etree.ElementTree as ET

    strXpath = "./row"

    field_list = ['IndexName', 'IndexID', 'CompositeSpread', 'CompositePrice',]

    tree = ET.parse(file_path)
    root = tree.getroot()

    value_list = []
    for el in root.findall(strXpath):
        value_list.append([el.find(x).text for x in field_list if el.find(x) is not None])
  • 0
    это также будет работать, если вы получите оба поля, ненужное добавит их оба.
  • 0
    Согласовано. Я не думал об этом, поскольку эти поля являются взаимоисключающими в моем случае, поскольку они проистекают из противоречивого соглашения об именах для разных файлов. Но в каждом XML-файле есть только одно такое поле.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню