спасибо за ваше время и ваше внимание. Это первый раз, когда я отправил сообщение в stackoverflow, поэтому извините, если я неуклюжий.
По сути, я кодирую в Python, но это первый раз, когда я анализирую файл XML. Я работал над этим в течение нескольких недель, но я заблокирован в одной точке или более.
Мой пример:
<record date="2019-12-02" time="19:13:40.091913" id="ALARM:Ctrl">
<field name="system_inst">run</field>
<field name="system_name">run0</field>
<field name="flags">AB2</field>
<field name="alias">CO31</field>
<field name="group">Clean</field>
<field name="priority">126</field>
<field name="text">Open feedback loss</field>
<field name="trtext">ouvert perdu</field>
<field name="end">2019-12-02 19:13:40.392992</field>
<field name="duration">0.301</field>
<field name="ackts">2016-12-02 20:39:25.615704</field>
<field name="user">toto</field>
<field name="acktext">tata</field>
<field name="ivtext">IvTxt</field>
</record>
<record date="2019-10-02" time="20:05:06.661429" id="ALARM:SFCReset">
<field name="system_inst">run</field>
<field name="system_name">run</field>
<field name="flags">AB1</field>
<field name="alias">G7</field>
<field name="group">MB</field>
<field name="priority">5</field>
<field name="text">X1 not ready</field>
<field name="trtext">x1 pas prêt</field>
<field name="end">2019-12-02 20:05:01.187379</field>
<field name="duration">0.99</field>
</record>
Количество записей является динамическим c и название поля бализа может меняться для каждой записи. Здесь мой код разбирает этот xml файл на pandas фрейм данных:
import pandas as pd
import xml.etree.ElementTree as et
import re
import itertools
with open('Alarm.xml') as f:
it = itertools.chain('<root>', f, '</root>')
root = et.fromstringlist(it)
df_cols = ["date", "time", "id", "system_inst","system_name", "flags", 'alias', 'group',
'priority', 'text', 'trtext', 'end', 'duration', 'ackts', 'user', 'acktext', 'ivtext']
rows = []
system_inst = []
system_name = []
flags = []
alias = []
group = []
priority = []
Text = []
trtext = []
end = []
duration = []
ackts = []
user = []
acktext = []
ivtext = []
for record in root.findall('record'):
ListDate = record.get('date')
ListTime = record.get('time')
ListId = record.get('id')
system_inst = record.getchildren()[0].text
system_name = record.getchildren()[1].text
flags = record.getchildren()[2].text
alias = record.getchildren()[3].text
group = record.getchildren()[4].text
priority = record.getchildren()[5].text
Text = record.getchildren()[6].text
trtext = record.getchildren()[7].text
end = record.getchildren()[8].text
duration = record.getchildren()[9].text
ackts = record.getchildren()[10].text
user = record.getchildren()[11].text
acktext = record.getchildren()[12].text
ivtext = record.getchildren()[13].text
rows.append({"date": ListDate, "time": ListTime, "id": ListId, "system_inst" : system_inst,
"system_name" : system_name, "flags" : flags, "alias" : alias, "group" : group,
"priority" : priority, "text" : Text, "trtext" : trtext, "end" : end,
"duration" : duration, "ackts" : ackts, "user" : user, "acktext" : acktext,
"ivtext" : ivtext})
out_df = pd.DataFrame(rows, columns = df_cols)
print(out_df)
Наконец, мне нужен такой фрейм данных: введите описание изображения здесь
Но для каждой записи у меня могут отсутствовать различные поля или нет, в этом случае мне бы хотелось, чтобы в кадре данных было «Нет». Но я не могу найти решение в данный момент.
Опять же, спасибо за ваше время и за вашу помощь.