Python 如何将分层Excel数据透视表转换为XML模式

Python 如何将分层Excel数据透视表转换为XML模式,python,excel,python-3.x,xml,data-structures,Python,Excel,Python 3.x,Xml,Data Structures,我在一家自然历史博物馆工作,需要为我们收藏的抽屉制作标签,这些抽屉有保存标本的分类。我将每个分类单元的电子表格作为一个单独的行存储在抽屉中(意味着一个抽屉有多行),如下所示 每个抽屉中的样本分类表: 我创建了一个pivot表,将数据转换成一个层次树状结构,或多或少地反映了我希望配置标签的方式(见下文) 每个抽屉中分类单元的数据透视表: 我想创建一个反映透视表层次结构的XML文档,以便在InDesign中自动生成抽屉标签。我不太熟悉XML模式,更不熟悉如何将平面表格数据导出到XML模式 如果有

我在一家自然历史博物馆工作,需要为我们收藏的抽屉制作标签,这些抽屉有保存标本的分类。我将每个分类单元的电子表格作为一个单独的行存储在抽屉中(意味着一个抽屉有多行),如下所示

每个抽屉中的样本分类表:

我创建了一个pivot表,将数据转换成一个层次树状结构,或多或少地反映了我希望配置标签的方式(见下文)

每个抽屉中分类单元的数据透视表:

我想创建一个反映透视表层次结构的XML文档,以便在InDesign中自动生成抽屉标签。我不太熟悉XML模式,更不熟悉如何将平面表格数据导出到XML模式

如果有Python解决方案,我很想看看你们的想法,或者有一种简单的方法可以使用Excel内置的XML exporter来实现。
非常感谢你的帮助

您可以使用python库pandas和dicttoxml非常轻松地处理此任务

假设您将数据保存在名为data.csv的文件中。然后,您可以使用这个(有点粗糙的)代码片段将其转换为所需的xml格式:

from collections import defaultdict

import pandas as pd
from dicttoxml import dicttoxml

data = pd.read_csv("./data.csv", sep=";")

xml_dictionary = defaultdict(lambda: defaultdict(lambda: defaultdict(lambda: defaultdict(str))))

for drawer, drawer_data in data.groupby(by="Drawer"):
    for class_, class_data in drawer_data.groupby(by="Class"):
        for subclass, subclass_data in class_data.groupby(by="Subclass"):
            for suborder, suborder_data in subclass_data.groupby(by="Suborder"):
                for family, family_data in suborder_data.groupby(by="Family"):
                    xml_dictionary[drawer][class_][subclass][suborder] = family

result = dicttoxml(xml_dictionary, custom_root='Labels', attr_type=False)
open('./result.xml', 'wb').write(result)
这样,您甚至不需要使用您创建的excel数据透视表