首页 > 解决方案 > 使用 XML ElementTree 从 XML(旧 Excel)文件中提取值

问题描述

我不太熟悉 xml elementTree 也不熟悉 Excel 如何编码 XML,甚至在访问我的文件中的值时也遇到了麻烦。如果有人能告诉我如何访问这些值并将整个文件转换为 CSV,我将不胜感激!

这是我的 XML 文件的一部分,我对标记为“数据”的工作表感兴趣(我已经展示了 2 行的一部分):

<?xml version='1.0'?>
<?mso-application progid='Excel.Sheet'?>
<s:Workbook xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:s="urn:schemas-microsoft-com:office:spreadsheet">
  <s:Styles>
  ...
  </s:Styles>
  <s:Worksheet s:Name="Description">
  ...
  </s:Worksheet>
  <s:Worksheet s:Name="Data">
    <s:Table s:DefaultColumnWidth="100">
      <s:Row>
        <s:Cell s:StyleID="Bold">
          <s:Data s:Type="String">Timestamp [msec]</s:Data>
        </s:Cell>
        <s:Cell s:StyleID="Bold">
          <s:Data s:Type="String">Heater [C]</s:Data>
        </s:Cell>
        ...
      </s:Row>
      <s:Row>
        <s:Cell s:StyleID="Default">
          <s:Data s:Type="Number">35</s:Data>
        </s:Cell>
        <s:Cell s:StyleID="Default">
          <s:Data s:Type="Number">42.02</s:Data>
        </s:Cell>
        ...
      </s:Row>
    </s:Table>
  </s:Worksheet>
...

这是我试图用来访问数据值的python代码(例如“35”、“42.02”):

import xml.etree.ElementTree as Xet

name_space = {"ss": "urn:schemas-microsoft-com:office:spreadsheet"}
cell_label = '{%s}Cell' % name_space["ss"]

tree = Xet.parse(data_filepath)
root = tree.getroot()
data_sheet = root[2]
table = data_sheet[0]

print(table.findall(cell_label))

这基本上给了我“[]”作为输出,但我确信“table”指的是正确的东西,因为我已经尝试打印它。如何迭代访问最内层标签的值以生成表格(列表列表),以便将其转换为 pandas 数据框,然后将其保存为 csv?

任何建议都会很棒!如果您也能具体一点,我将不胜感激,因为我真的不知道这里的语法细节。谢谢 :)

标签: pythonexcelpandascsvxml.etree

解决方案


推荐阅读