У меня есть список linkId
.
links_o_i = [652518, 345004, 225317, 177396, 551734]
Кроме того, у меня есть файл XML со следующей структурой:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE facilities SYSTEM "http://www.matsim.org/files/dtd/facilities_v1.dtd">
<facilities name="Facilities from different sources">
<!-- ====================================================================== -->
<facility id="10002" linkId="666355" x="2684102.0" y="1253168.0">
<activity type="other">
</activity>
<activity type="work">
</activity>
</facility>
<!-- ====================================================================== -->
<facility id="10007" linkId="961312" x="2683486.0" y="1247853.0">
<activity type="other">
</activity>
<activity type="work">
</activity>
</facility>
<!-- ====================================================================== -->
<facility id="100070" linkId="652518" x="2684238.0" y="1246568.0">
<activity type="leisure">
</activity>
<activity type="other">
</activity>
<activity type="work">
</activity>
</facility>
<!-- ====================================================================== -->
<facility id="100071" linkId="1063278" x="2689220.0" y="1243493.0">
<activity type="leisure">
</activity>
<activity type="other">
</activity>
<activity type="work">
</activity>
</facility>
<!-- ====================================================================== -->
<facility id="100072" linkId="786540" x="2680812.0" y="1249375.0">
<activity type="leisure">
</activity>
<activity type="other">
</activity>
<activity type="work">
</activity>
</facility>
<!-- ====================================================================== -->
<facility id="100073" linkId="225317" x="2681506.0" y="1249508.0">
<activity type="other">
</activity>
<activity type="shop">
</activity>
<activity type="work">
</activity>
</facility>
</facilities>
Я хочу проанализировать файл XML и извлечь соответствующие x
и y
значения facility
, которые имеют linkId
, который находится внутри списка links_o_i
.
Целью будет фрейм данных из трех столбцов со значениями linkId
, x
и y
.
Мой подход пока ничего не дает, и я изо всех сил пытаюсь найти причину этого. Следует отметить, что список, как и XML, намного больше.
import gzip
import xml.etree.ElementTree as ET
from collections import defaultdict
import pandas as pd
tree = ET.iterparse(gzip.open("file.xml.gz", 'r'))
link_coords = defaultdict(list)
for xml_event, elem in tree:
attributes = elem.attrib
if elem.tag == 'facility' \
and elem.attrib["linkId"] in links_o_i:
link_coords[attributes['linkId']].append[attributes['x', 'y']]
elem.clear()
link_coords = pd.DataFrame.from_dict(link_coords)