Создание файла XML в узлах Python отсутствует - PullRequest
0 голосов
/ 25 декабря 2018

Я хочу создать файл XML с библиотекой elementtree.

файл XML должен выглядеть следующим образом:

<files>
    <file>
        <ans>EP16</ans>
        <ep></ep>
        <date>2017-03-15</date>
        <concepts>~what</concepts>
    </file>
    <file>
        <ans>EP17</ans>
        <ep>ep6665</ep>
        <date>2017-03-15</date>
        <concepts>~whatever</concepts>
     </file>
     etc
</files>

Я пытаюсь сделать это следующим образом:

import xml.etree.ElementTree as ET
XMLfiles = ET.Element("files")
file= ET.SubElement(XMLfiles, "file")


nrofrows=dffiles.shape[0]
for i in range(nrofrows):
    serie=dffiles.iloc[i]
    child1=ET.SubElement(file, "an")
    child1.text=serie[0]
    child2=ET.SubElement(file, "ep")
    child2.text=serie[1]
    child3=ET.SubElement(file, "date")
    child3.text=serie[2]
    child4=ET.SubElement(file, "concepts")
    child4.text=serie[3]

сохранение файла:

tree2 = ET.ElementTree(XMLfiles)
filetosave=os.path.join('00DATA_output','bb.xml')
tree2.write(filetosave)

файл XML создан, но он пропускает закрытие для каждого файла.созданный XML-файл начинался как:

<files>
    <file>
        <ans>EP16</ans>
        <ep></ep>
        <date>2017-03-15</date>
        <concepts>~what</concepts>
   ... ***** closing and open <file> is missing
        <ans>EP17</ans>
        <ep>ep6665</ep>
        <date>2017-03-15</date>
        <concepts>~whatever</concepts>
    </file>
</files>

что не хватает в коде для открытия и закрытия файла каждый раз?Примечание: Предположим, что анализируемая df в порядке, серия - это строка df.

1 Ответ

0 голосов
/ 26 декабря 2018

Если вам нужен тег <file> для каждой строки в элементе dffiles, переместите его также внутри цикла.

nrofrows = dffiles.shape[0]
for i in range(nrofrows):
    file = ET.SubElement(XMLfiles, "file")
    serie = dffiles.iloc[i]
    child1 = ET.SubElement(file, "an")
    child1.text = serie[0]
    child2 = ET.SubElement(file, "ep")
    child2.text = serie[1]
    child3 = ET.SubElement(file, "date")
    child3.text = serie[2]
    child4 = ET.SubElement(file, "concepts")
    child4.text = serie[3]
...