如何用Python将嵌套XML转换为CSV?问题排查与实现
XML转CSV:如何展开嵌套字典并完整保留所有标签?
我需要写一个Python程序,能接收任意XML文件作为输入,将其转换为CSV文件且不丢失任何XML标签/元素,可以使用任意Python工具。我尝试了xmltodict、json、csv和pandas模块,已经成功读取XML并将其转换为字典,但无法将该字典转换为可写入CSV的列表,确保所有XML字段都被捕获。
示例XML文件
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <tag_1> <tag_2> <date value="06-30-2023"> <data> <tag_3>val_3</tag_3> <tag_4>val_4</tag_4> <tag_5>val_5_1 & val_5_2</tag_5> <tag_6>-0.157</tag_6> </data> <data> <tag_3>val_3</tag_3> <tag_4>val_4_2</tag_4> <tag_5>val_5_1</tag_5> <tag_6>-0.173</tag_6> </data> </date> </tag_2> <tag_7> <date value="06-30-2023"> <data><tag_3>val_3</tag_3><tag_4>val_4</tag_4><tag_5>val_5_1 & val_5_2</tag_5><tag_6>-0.157</tag_6> </data> <data><tag_3>val_3</tag_3><tag_4>val_4_2</tag_4><tag_5>val_5_1</tag_5><tag_6>-0.173</tag_6> </data> </date> </tag_7> </tag_1>
转换后的字典
{'tag_1': {'tag_2': {'date': {'@value': '06-30-2023', 'data': [{'tag_3': 'val_3', 'tag_4': 'val_4', 'tag_5': 'val_5_1 & val_5_2', 'tag_6': '-0.157'}, {'tag_3': 'val_3', 'tag_4': 'val_4_2', 'tag_5': 'val_5_1', 'tag_6': '-0.173'} ] } }, 'tag_7': {'date': {'@value': '06-30-2023', 'data': [{'tag_3': 'val_3', 'tag_4': 'val_4', 'tag_5': 'val_5_1 & val_5_2', 'tag_6': '-0.157'}, {'tag_3': 'val_3', 'tag_4': 'val_4_2', 'tag_5': 'val_5_1', 'tag_6': '-0.173'} ] } } } }
期望的CSV输出
tag_1,tag_2,date,data,tag_3,tag_4,tag_5,tag_6 tag_1,tag_2,06-30-2023,data,val_3,val_4,val_5_1 & val_5_2,-0.157 tag_1,tag_2,06-30-2023,data,val_3,val_4_2,val_5_1,-0.173 tag_1,tag_7,06-30-2023,data,val_3,val_4,val_5_1 & val_5_2,-0.157 tag_1,tag_7,06-30-2023,data,val_3,val_4_2,val_5_1,-0.173
当前尝试的代码
import xmltodict import json import csv import pandas as pd with open("file_01.xml", "r", encoding="utf-8") as xml_fh: str_xml = xml_fh.read() print(f"str_xml={type(str_xml)}={str_xml}") dict_xml = xmltodict.parse(str_xml) print(f"dict_xml={type(dict_xml)}={dict_xml}") df = pd.DataFrame.from_dict(dict_xml, orient='index') df.to_csv('file_01.csv', index = False)
实际得到的结果
tag_2,tag_7 "{'date': {'@value': '06-30-2023', 'data': [{'tag_3': 'val_3', 'tag_4': 'val_4', 'tag_5': 'val_5_1 & val_5_2', 'tag_6': '-0.157'}, {'tag_3': 'val_3', 'tag_4': 'val_4_2', 'tag_5': 'val_5_1', 'tag_6': '-0.173'}]}}","{'date': {'@value': '06-30-2023', 'data': [{'tag_3': 'val_3', 'tag_4': 'val_4', 'tag_5': 'val_5_1 & val_5_2', 'tag_6': '-0.157'}, {'tag_3': 'val_3', 'tag_4': 'val_4_2', 'tag_5': 'val_5_1', 'tag_6': '-0.173'}]}}"
请问我遗漏了什么?
内容的提问来源于stack exchange,提问作者300
相关产品推荐
相关产品推荐

