Python - Преобразование XML в CSV с использованием Python панд

У меня ранее была аналогичная проблема после обновления с 5.3 до 5.4. Но моя настройка выглядит немного по-другому, так как я запускаю Debian и использую fcgid для сервера PHP-страниц, а не модуль PHP5 apache / cgi. Поэтому после того, как я обновил его, он также установил php5_cgi, который столкнулся с моей установкой fcgid и больше не будет выполнять файлы PHP.

Мне пришлось отключить модуль Apache и перезапустить Apache

a2dismod php5_cgi
/etc/init.d/apache2 restart

После того, как модуль php5_cgi был в стороне, fcgid снова смог обслуживать страницы PHP.

3
задан coding learner 6 March 2019 в 10:05
поделиться

2 ответа

Если я правильно понял ваш вопрос, вам нужно пройтись по дереву XML, так что вы, вероятно, захотите иметь рекурсивную функцию, которая делает это. Примерно так:

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

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

def f(elem, result):
    result[elem.tag] = elem.text
    cs = elem.getchildren()
    for c in cs:
        result = f(c, result)
    return result

d = f(root, {})
df = pd.DataFrame(d, index=['values']).T
df

Out:

    values
Transmission    \n
TransmissionBody    \n
level1  \n
level2  \n
level3  \n
level4  \n
level5  \n
level6  \n
ColA    ABC
ColB    123

Обновление: Вот когда нам нужно сделать это для нескольких файлов XML. Я добавил еще один файл, похожий на исходный файл с ColA, строки ColB заменены на

<ColA>DEF</ColA>
<ColB>456</ColD>

Вот код:

def f(elem, result):
    result[elem.tag] = elem.text
    cs = elem.getchildren()
    for c in cs:
        result = f(c, result)
    return result

result = {}
for file in glob.glob('*.xml'):
    tree = ET.parse(file)
    root = tree.getroot()
    result = f(root, result)

df = pd.DataFrame(result, index=['values']).T
df

И вывод:

                    0    1
Transmission       \n   \n
TransmissionBody   \n   \n
level1             \n   \n
level2             \n   \n
level3             \n   \n
level4             \n   \n
level5             \n   \n
level6             \n   \n
ColA              ABC  DEF
ColB              123  456
0
ответ дан perl 6 March 2019 в 10:05
поделиться

у вас есть проблема с отступами на

if len(elem):

Я думаю, это должно решить ее.

0
ответ дан fastali 6 March 2019 в 10:05
поделиться
Другие вопросы по тегам:

Похожие вопросы: