Я бы использовал библиотеку lxml
, чтобы получить нужные значения:
from lxml import etree
file1 = etree.parse('/path/to/file1.xml')
# This will give you a list of Elements
data1 = file1.xpath('//data')
agg_1 = []
for timestep in data1:
ts = []
# The lanes element is the only (immediate) child of data,
# so we can get each lane as the children of lanes
lanes = timestep.getchildren()[0].getchildren()
# Need to get the queueing_time and queueing_length
# attributes from each lane
for lane in lanes:
ts.append((lane.attrib.get('queueing_time'), lane.attrib.get('queueing_length'))
x, y = sum([float(x) for x,_ in ts]), sum([float(y) for _,y in ts])
agg_1.append((x,y))
Это должно дать вам список, структурированный как [(0.00, 0.00), (120.00, 102.32),...]
, где каждая запись представляет временную метку (при условии, что все они есть. Вы можете повторить этот процесс для file_2
, и это даст вам агрегированную статистику. У меня нет использовал matplotlib
через некоторое время, так что я могу добавить это в редактирование, но это должно помочь вам начать
ПРИМЕЧАНИЕ. Это не относится к случаям, когда:
- В
lanes
- Значение временного шага отсутствует в
xml (например, если 60 было пропущено)