繁体   English   中英

何在python中将xml文件解析为xlsx

[英]Ho to parse xml file to xlsx in python

我有一个这样的文件 xml(输入):

> <?xml version="1.0" encoding="UTF-8" standalone="yes"?\>
> <obs id="0"\>
> <dim name="Column1" value="a"/\>
> <dim name="Column2" value="b"/\>
> </obs\>
> <obs id="1">
> <dim name="Column1" value="tr"/\>
> <dim name="Column2" value="yu"/\>
> </obs\>

我该怎么做才能在 xlsx 文件中进行解析? 我想要一个这样的 xlsx 文件:

列 1|列 2 a |b tr |yu

专栏1 专栏2
一种 b

非常感谢。 我试过其他 xml 解析器,但我没有意识到解决方案。

您可以使用BeautifulSoup解析 XML 文档 + pandas以将数据框保存为 CSV 和/或 Excel 格式:

import pandas as pd
from bs4 import BeautifulSoup


with open("your_file.xml", "r") as f_in:
    soup = BeautifulSoup(f_in.read(), "html.parser")  # <-- you can ignore the warning or use different parser, such as `xml`

all_data = []
for obs in soup.select("obs"):
    d = {}
    for dim in obs.select("dim[name][value]"):
        d[dim["name"]] = dim["value"]

    all_data.append(d)

df = pd.DataFrame(all_data)
print(df)

df.to_csv('data.csv', index=False)

这打印:

  Column1 Column2
0       a       b
1      tr      yu

并保存data.csv


输入文件是:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<obs id="0">
<dim name="Column1" value="a" />
<dim name="Column2" value="b" />
</obs>
<obs id="1">
<dim name="Column1" value="tr" />
<dim name="Column2" value="yu" />
</obs>

您需要一个只有一个root element的格式良好的 XML,例如:

<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<root>
  <obs id="0">
    <dim name="Column1" value="a"/>
    <dim name="Column2" value="b"/>
  </obs>
  <obs id="1">
    <dim name="Column1" value="tr"/>
    <dim name="Column2" value="yu"/>
  </obs>
</root>

您可以将此 xml 解析为 pandas DataFrame的列和行,并使用 pandas ExcelWriter()将此df写入 Excel 工作表:

import xml.etree.ElementTree as ET
import pandas as pd
import openpyxl

tree = ET.parse('Excel.xml')
root = tree.getroot()

columns = []
data = []
for elem in root.iter('dim'):
    if elem.get('name') not in columns:
        columns.append(elem.get('name'))
    if elem.get('name') == "Column1":
        c1 = elem.get('value')
    else:
        c2 = elem.get('value')
        row = (c1, c2)
        data.append(row)

df = pd.DataFrame(data, columns=columns)
print(df)

with pd.ExcelWriter("Excel.xlsx") as writer:
    df.to_excel(writer) 

结果: Excel

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM