Задать вопрос
@Dato38it

Как мне написать условие для работы с файлами kml разной структуры?

Есть два kml файла, которых мне нужно обработать. Первый файл:
<kml xmlns="http://www.opengis.net/kml/2.2"> <Placemark>
<name>REG000478/1</name>
<description>Область\16а</description>
<Point>
<coordinates>132.149558,24.127582,0</coordinates>
</Point>
</Placemark> <Placemark>
<name>REG000479/1</name>
<description>Область\16а</description>
<Point>
<coordinates>132.464464,24.464465,0</coordinates>
</Point>
</Placemark><Placemark>
<name>REG000480/1</name>
<description>Область\16а</description>
<Point>
<coordinates>132.644645,24.674676,0</coordinates>
</Point>
</Placemark></kml>

Второй файл:
<kml xmlns="http://www.opengis.net/kml/2.2"><Folder>
<Placemark>
    <name>REG2046</name>
    <description>BSC: 461255 LAC: 5263</description>
    <LookAt>
     <longitude>131.617857694465</longitude>
     <latitude>46.170367946112</latitude>
     <altitude>0</altitude>
     <heading>1</heading>
     <tilt>0</tilt>
     <range>10000</range>
     <gx:altitudeMode>relativeToSeaFloor</gx:altitudeMode>
    </LookAt>
    <styleUrl>grn-pushpin</styleUrl>
    <Point>
     <gx:drawOrder>1</gx:drawOrder>
     <coordinates>131.617857694465,46.170367946112</coordinates>
    </Point>
   </Placemark>
   <Placemark>
    <name>REG2048</name>
    <description>BSC: 461255 LAC: 5263</description>
    <LookAt>
     <longitude>131.629717201179</longitude>
     <latitude>46.1575287309287</latitude>
     <altitude>0</altitude>
     <heading>1</heading>
     <tilt>0</tilt>
     <range>10000</range>
     <gx:altitudeMode>relativeToSeaFloor</gx:altitudeMode>
    </LookAt>
    <styleUrl>grn-pushpin</styleUrl>
    <Point>
     <gx:drawOrder>1</gx:drawOrder>
     <coordinates>131.629717201179,46.1575287309287</coordinates>
    </Point>
   </Placemark>
   <Placemark>
    <name>REG2049</name>
    <description>BSC: 461255 LAC: 5263</description>
    <LookAt>
     <longitude>131.611383223499</longitude>
     <latitude>46.1575287682282</latitude>
     <altitude>0</altitude>
     <heading>1</heading>
     <tilt>0</tilt>
     <range>10000</range>
     <gx:altitudeMode>relativeToSeaFloor</gx:altitudeMode>
    </LookAt>
    <styleUrl>grn-pushpin</styleUrl>
    <Point>
     <gx:drawOrder>1</gx:drawOrder>
     <coordinates>131.611383223499,46.1575287682282</coordinates>
    </Point>
   </Placemark>
</Folder></kml>

Сложность у меня в том, что они тут разной структуры.
Как мне написать условие, чтобы в выборе файла допустим по первой структуры отображались данные на экране из атрибутов name и coordinates, а при выборе файла второй структуры отображались данные на экране из атрибутов name, description, longitude и latitude?
не перебирать же циклы, как в моем коде.
Сейчас у меня такой код:
import re
with open("Site_REG000478_1.kml","r", encoding="utf8") as file:
#with open("REG.kml","r", encoding="utf8") as file:
    contents = file.read()
#print(contents)    
Placemark = re.findall(r'<Placemark>(.*?)</Placemark>', contents, re.DOTALL)
#print(Placemark)
count=0
for i in Placemark:
    #print(i)
    listname = re.findall(r'<name>(.*?)</name>', i, re.DOTALL)
    coords = re.findall(r'<coordinates>(.*?)</coordinates>', i, re.DOTALL)
    #print(listname)
    #print(coords)
    for k in listname:
        result = k.split('/')[0]
        print(result)
        '''with open("output.txt", "w") as outfile:
            outfile.write(result+'\n')'''
    for j in coords:
        result = j.split(',')[:2]
        print(result)
        '''with open("output.txt", "a") as outfile:
            outfile.write(result+'\n')'''

Вот такие выводы на экране у меня отображаются:
REG000478
['132.149558', '24.127582']
REG000479
['132.464464', '24.464465']
REG000480
['132.644645', '24.674676']

REG2046
['131.617857694465', '46.170367946112']
REG2048
['131.629717201179', '46.1575287309287']
REG2049
['131.611383223499', '46.1575287682282']
  • Вопрос задан
  • 89 просмотров
Подписаться 1 Простой 5 комментариев
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
22 дек. 2024, в 20:40
10000 руб./за проект
22 дек. 2024, в 20:34
3000 руб./за проект
22 дек. 2024, в 20:12
10000 руб./за проект