2016-03-22 67 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

非常感謝! –

相關問題