Python-ETree element.find部分匹配

时间:2018-07-12 16:17:20

标签: python elementtree

下面的代码片段循环遍历几个xml文件,并从每个字典中提取3个“列”。 xml中的一个具有名为“ IndexName”而不是“ IndexID”的稍有不同的第一个字段。如何摆脱单个字段列表(如

)的困扰
var arrN = [
   [{ id: 'A1', start: '2018-01-01' }, { id: 'A2', start: '2018-01-01' }], // 0
   [{ id: 'B1', start: '2018-01-02' }, { id: 'B2', start: '2018-01-02' }], // 1
   [{ id: 'C1', start: '2018-01-03' }, { id: 'C2', start: '2018-01-03' }] // 2 <<<Want this index which should be 2     
];

var date = '2018-01-03';

//  if each element of sub-array do not have same date
arrN.forEach(function(element, index) {
  element.some(function(obj){
      return obj.start == date
  }) ? console.log(index) : '';
});

查找部分匹配项:

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

1 个答案:

答案 0 :(得分: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])