我有一个XML
文件,其中包含摘要信息的头和后面的主数据表。我已经将主数据表导出并放入pd.df
,但是现在我想将部分头信息提取到字典中。你知道吗
文件示例:
<Workbook>
<Worksheet>
<Tables>
<Row>
<Cell ss:StyleID="HeadTableTitle" ss:MergeAcross="1"><Data ss:Type="String">Administrative Data</Data></Cell>
</Row>
<Row>
<Cell ss:StyleID="HeadTableParameterName" ss:MergeAcross="1"><Data ss:Type="String">ID</Data></Cell>
<Cell ss:StyleID="HeadTableParameterValue" ss:MergeAcross="7"><Data ss:Type="String">B013</Data></Cell>
</Row>
<Row>
<Cell ss:StyleID="HeadTableParameterName" ss:MergeAcross="1"><Data ss:Type="String">Title</Data></Cell>
<Cell ss:StyleID="HeadTableParameterValue" ss:MergeAcross="7"><Data ss:Type="String">Mr</Data></Cell>
</Row>
<Row>
<Cell ss:StyleID="HeadTableParameterName" ss:MergeAcross="1"><Data ss:Type="String">Last Name</Data></Cell>
<Cell ss:StyleID="HeadTableParameterValue" ss:MergeAcross="7"><Data ss:Type="String">Data</Data></Cell>
</Row>
<Row>
<Cell ss:StyleID="HeadTableParameterName" ss:MergeAcross="1"><Data ss:Type="String">First Name</Data></Cell>
<Cell ss:StyleID="HeadTableParameterValue" ss:MergeAcross="7"><Data ss:Type="String">Test</Data></Cell>
</Row>
<Row/>
<Row/>
<Row>
<Cell ss:StyleID="HeadTableTitle" ss:MergeAcross="1"><Data ss:Type="String">Biological and Medical Baseline Data</Data></Cell>
</Row>
<Row>
<Cell ss:StyleID="HeadTableParameterName" ss:MergeAcross="1"><Data ss:Type="String">Height</Data></Cell>
<Cell ss:StyleID="HeadTableParameterValue" ss:MergeAcross="7"><Data ss:Type="String">176 cm</Data></Cell>
</Row>
<Row>
<Cell ss:StyleID="HeadTableParameterName" ss:MergeAcross="1"><Data ss:Type="String">Weight</Data></Cell>
<Cell ss:StyleID="HeadTableParameterValue" ss:MergeAcross="7"><Data ss:Type="String">56.9 kg</Data></Cell>
</Row>
</Tables>
</Worksheet>
</Workbook>
我想做的是将“Administrative data”部分中的数据提取到一个字典中,其中第一个“cell”值作为键(如果我可以删除一些非常棒的空格),第二个“cell”值作为项。然后需要重复这些操作,以便将“生物和医学基线数据”中的数据保存在单独的字典中。词典名称可以是任何名称(例如“subject”和“biomed”)
解析XML
文件并访问标记的当前代码:
from lxml import etree
f_path = 'data store/cortex_full.xml' # enter path of xml file
# open and parse xml file
with open(f_path, 'r', encoding='utf-8') as f: # set encoding to utf-8 for mac
root = etree.parse(f)
namespaces = {'o': 'urn:schemas-microsoft-com:office:office',
'x': 'urn:schemas-microsoft-com:office:excel',
'ss': 'urn:schemas-microsoft-com:office:spreadsheet'}
ws = root.xpath('/ss:Workbook/ss:Worksheet', namespaces=namespaces)
if len(ws) > 0:
tables = ws[0].xpath('./ss:Table', namespaces=namespaces)
if len(tables) > 0:
rows = tables[0].xpath('./ss:Row', namespaces=namespaces)
for row in rows:
cells = row.xpath('./ss:Cell/ss:Data', namespaces=namespaces)
对如何处理这个问题有什么建议吗?如果一本字典不是随意的,也乐意与其他人合作建议。你知道吗
请务必在
之前申报以下内容
并考虑更换
与
虽然没有必要,但我已经加入了一些检查,只是为了给出一个想法,但是您可以扩展检查,使其更加健壮。你知道吗
我还有一个工作版本here。你知道吗
相关问题 更多 >
编程相关推荐