如何从XML文件导入特定数据并使用python 3.5处理它?

时间:2016-03-22 13:59:30

标签: python xml python-3.x

我有一个包含以下代码的xml文件:

<?xml version="1.0" encoding="windows-1252" standalone="yes"?><!-- Generated by SMExport 4.88--><ROOT>  <RECORDS>
<METADATA><FIELDS><FIELD attrname="SALENUM" fieldtype="i4"/><FIELD attrname="TIME" fieldtype="time"/><FIELD attrname="DATE" fieldtype="date"/><FIELD attrname="AMOUNT" fieldtype="r8" SUBTYPE="Money"/></FIELDS><PARAMS DEFAULT_ORDER="1" PRIMARY_KEY="1" LCID="1033"/></METADATA>
  <RECORD>
    <ROW
      SALENUM="1"
      TIME="125108"
      DATE="20160122"
      AMOUNT="22.9"
    />
  </RECORD>
  <RECORD>
    <ROW
      SALENUM="2"
      TIME="125243"
      DATE="20160122"
      AMOUNT="22.9"
    />
  </RECORD>

加上很多其他记录。

问题:导入此数据并在python中处理它的最简单方法是什么?我正在尝试使用xml.etree.ElementTree,我最后要做的是将销售价格加起来并将该信息存储在变量中。

有什么想法吗?

1 个答案:

答案 0 :(得分:2)

使用.findall()找到ROW元素中的RECORD元素和.attrib,以访问AMOUNT属性。完整的例子:

import xml.etree.ElementTree as ET

data = """<?xml version="1.0" encoding="windows-1252" standalone="yes"?><!-- Generated by SMExport 4.88--><ROOT>  <RECORDS>
<METADATA><FIELDS><FIELD attrname="SALENUM" fieldtype="i4"/><FIELD attrname="TIME" fieldtype="time"/><FIELD attrname="DATE" fieldtype="date"/><FIELD attrname="AMOUNT" fieldtype="r8" SUBTYPE="Money"/></FIELDS><PARAMS DEFAULT_ORDER="1" PRIMARY_KEY="1" LCID="1033"/></METADATA>
  <RECORD>
    <ROW
      SALENUM="1"
      TIME="125108"
      DATE="20160122"
      AMOUNT="22.9"
    />
  </RECORD>
  <RECORD>
    <ROW
      SALENUM="2"
      TIME="125243"
      DATE="20160122"
      AMOUNT="22.9"
    />
  </RECORD>
</RECORDS>
</ROOT>"""

root = ET.fromstring(data)
amounts = [float(row.attrib["AMOUNT"]) for row in root.findall(".//RECORD/ROW")]
print(amounts)

打印:

[22.9, 22.9]

然后,您可以使用内置sum()来累计金额:sum(amounts)