2016-03-22 35 views
0

我有一个包含以下代码的XML文件:如何从XML文件导入特定数据并使用python 3.5处理它?

<?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,最后我想要做的是加起来的销售价格并将这些信息存储在一个变量中。

任何想法?

回答

2

使用.findall()来找到RECORD元素中的ROW元素和.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)

+0

非常感谢! –

相关问题