我有一个包含以下代码的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,我最后要做的是将销售价格加起来并将该信息存储在变量中。
有什么想法吗?
答案 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)
。