如何将数据帧中的值解压缩为xml

2024-06-16 10:10:24 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个如下的数据帧

df = pd.DataFrame({'Field':['FAPERF','FAPERF','FAPERF','FAPERF'],
           'Form':['LIVERID','LIVERID','LIVERID','LIVERID'],
           'Folder':['ALL','ALL','ALL','ALL'],
           'Logline':['9','9','9','10'],
           'Data':['Yes','Blank','No','Yes']})

我必须以如下格式将这些值调用到xml文件

<?xml version="1.0" encoding="UTF-8"?>
<ODM xmlns="http://www.cdisc.org/ns/odm/v1.3" xmlns:mdsol="http://www.mdsol.com/ns/odm/metadata"
     ODMVersion="1.3" CreationDateTime="2019-10-25T07:29:41.711-00:00"
     FileOID="9a49b521-41ca-4b4b-81f1-9eae73df1c99" FileType="Transactional">
    <ClinicalData StudyOID="D933LC00001(DEV)" MetaDataVersionOID="1">
        <SubjectData SubjectKey="E888017" TransactionType="Update">
            <SiteRef LocationOID="9999 - A Site"/>
            <StudyEventData StudyEventOID="VISIT1" TransactionType="Update">
                <FormData FormOID="DM" TransactionType="Update">
                    <ItemGroupData ItemGroupOID="DM" TransactionType="Upsert">
                        <ItemData ItemOID="SEX" Value="C16576" TransactionType="Context">
                            <mdsol:Query Recipient="Site" Value="Analyse the race value"
                                         Status="Open"/>
                        </ItemData>
                    </ItemGroupData>
                </FormData>
            </StudyEventData>
        </SubjectData>
    </ClinicalData>
</ODM>

到目前为止,我编写的代码如下

from xml.etree.ElementTree import Element, SubElement, Comment, tostring
import datetime
import openpyxl, smtplib, sys
#from ElementTree import prettify

generated_on = str(datetime.datetime.now())

root = Element('ODM')
root.set('version', '1.0')
#def alldata(Form, Logline, Data, Field, Folder): 
for i in length (final_intermediate1):   
    SubjectData=SubElement(ClinicalData, 'SubjectData', {'text':Form(i)})
    SiteRef =SubElement(SubjectData, 'SiteRef', {'text':Logline(i)})
    StudyEventData =SubElement(SiteRef, 'StudyEventData', {'text':Data(i)})
    FormData =SubElement(StudyEventData, 'FormData', {'text':Field(i)})
    ItemGroupData =SubElement(FormData, 'ItemGroupData', {'text':Folder(i)})
    #ClinicalData=SubElement(root, 'ClinicalData')

print prettify(root)

不知道如何将值从dataframe中解包并将其调用为xml。我被困在这里了。需要帮忙吗


Tags: textimportrootxmlallsubelementformdatasiteref
1条回答
网友
1楼 · 发布于 2024-06-16 10:10:24

像这样? 美丽印刷的功劳:

Use xml.etree.ElementTree to print nicely formatted xml files

Pretty printing XML in Python

from xml.etree.ElementTree import Element, SubElement, Comment, tostring
import datetime
import pandas as pd
from xml.dom import minidom
from xml.etree import ElementTree

def prettify(elem):
    """Return a pretty-printed XML string for the Element.
    """
    rough_string = ElementTree.tostring(elem, 'utf-8')
    reparsed = minidom.parseString(rough_string)
    return reparsed.toprettyxml(indent="\t")

generated_on = str(datetime.datetime.now())
df = pd.DataFrame({'Field': ['FAPERF', 'FAPERF', 'FAPERF', 'FAPERF'],
                   'Form': ['LIVERID', 'LIVERID', 'LIVERID', 'LIVERID'],
                   'Folder': ['ALL', 'ALL', 'ALL', 'ALL'],
                   'Logline': ['9', '9', '9', '10'],
                   'Data': ['Yes', 'Blank', 'No', 'Yes']})

root = Element('ODM')
root.set('version', '1.0')
ClinicalData = SubElement(root, 'ClinicalData', {'text': 'yadeyadeyade'})
for index, rows in df.iterrows():
    SubjectData = SubElement(ClinicalData, 'SubjectData', {'text': rows.Form})
    SiteRef = SubElement(SubjectData, 'SiteRef', {'text': rows.Logline})
    StudyEventData = SubElement(SiteRef, 'StudyEventData', {'text': rows.Data})
    FormData = SubElement(StudyEventData, 'FormData', {'text': rows.Field})
    ItemGroupData = SubElement(FormData, 'ItemGroupData', {'text': rows.Folder})

print(prettify(root))

相关问题 更多 >