【发布时间】:2016-06-25 04:42:00
【问题描述】:
我刚开始使用 (=learn) Python 2.7。我目前关注的重点是从 XML 文件中提取信息。到目前为止 xml.etree.ElementTree 让我走得很远。我现在遇到了“KeyError”。原因 - 据我所知 - 是具有不同属性的元素。
(更大的)XML 文件的关键部分:
<?xml version='1.0' encoding='utf-8' ?>
<XMLFILE>
<datasources>
<datasource caption='Sheet1 (ExcelSample)'>
<connection class='excel-direct' filename='~\SomeExcel.xlsx' .....>
......
</connection>
<column header='Unit Price' datatype='real' name='[Calculation_1]' role='measure' type='quantitative'>
<calculation class='calculation' formula='Sum(Profit)/Sum(Sales)' />
</column>
<column datatype='integer' name='[Sales]' role='measure' type='quantitative' user:auto-column='numrec'>
<calculation class='trial' formula='1' />
</column>
</datasource>
</datasources>
........
</XMLFILE>
我的 Python 代码可以很好地提取数据类型和名称,即两列中都存在的属性:
for cal in xmlfile.findall('datasources/datasource/column'):
dt= cal.attrib[ 'datatype' ]
nm= cal.attrib[ 'name' ]
print 'Column name:', dt, ' ', 'datatype:', nm
结果:
Column name: Calculation_1, datatype:real
Column name: Sales, datatype:integer
但是,如果我使用 cal.attrib['header'] Python 2.7。打印出来
"KeyError: 'header'
问题:如何告诉 Python 2.7。产生所需的输出:
Calculation "Unit Price": Sum(Profit)/Sum(Sales)
更准确地说,Python 应该做什么:“对于所有(= 如果不止一个,如上例中的那样)列包含属性 'header' 打印输出
header: Unit Price
formula: Sum(Profit)
header: Sales per day in month
formula: Sales / count(days(month))
(注意:为了显示更完整的所需输出,我添加了另一列,但我的示例中还没有)
非常感谢您的帮助!
【问题讨论】:
标签: python xml python-2.7