C, C++, Java, PHP, Ruby...

Pravila foruma

U naslovu teme unutar uglatih zagrada navesti o kojem jeziku je riječ. Primjer: [Java]
Odgovori

[Python(3)] Čitanje XML datoteka

20 pro 2021, 14:31

Bok!

Zapeo sam na jednom problemu u Python jeziku pa bih molio za pomoć.

Ovo je izgled XML datoteke

<GradIme>RC Bilogora</GradIme>
<Lat>45.884</Lat>
<Lon>17.200 </Lon>
<Podatci>
<Temp> 4.4</Temp>
<Vlaga>67</Vlaga>
<Tlak>1021.7</Tlak>
<TlakTend>+0.9</TlakTend>
<VjetarSmjer>NW</VjetarSmjer>
<VjetarBrzina> 4.4</VjetarBrzina>
<Vrijeme>pretežno vedro</Vrijeme>
<VrijemeZnak>2</VrijemeZnak>
</Podatci>
</Grad>


Datoteka se dalje nastavlja sa jednakog izgleda za svaku glavnu meteorlokšku postaju u Hrvatskoj.

Ja želim složiti Python skriptu u kojoj bih odabrao grad (padajuća lista ili upis ovisno o tome ima li GUI ili ne), a skripta bi mi onda u lako čitljivom obliku izbacila informacije ovremenu za odabranu postaju/grad. Problem je što ne razumijem dobro tutorijale koji govore o radu sa XML datotekama u Pythonu pa bih molio nekoga tko ima iskustva da bi složi primjer koji bih mogao koristiti u daljnjoj izradi skripte.

Znači, želio bih da skripta ima otprilike ovakav output (za navedeni primjer):

Postaja: RC Bilogora
Temperatura zraka: 4.4°C
Relativna vlaga zraka: 67%
Tlak zraka: 1021.7 hPa
Vjetar: NW 4.4 m/s

Re: [Python(3)] Čitanje XML datoteka

21 pro 2021, 07:59

Datoteku s podacima nazvao sam meteoPostaje.xml.
U primjeru koji si postavio nedostaje početni tag za grad.
Prva linija morala bi bit <Grad>.

Kod:
import xml.etree.ElementTree as ET

l = {
  "GradIme" : ("Postaja:", ""),
  "Temp" : ("Temperatura:", "°C\n"),
  "Vlaga" :  ("Relativna vlaga zraka:", "%\n"),
  "Tlak" : ("Tlak zraka:", " hPa\n"),
  "VjetarSmjer" : ("Vjetar:", ""),
  "VjetarBrzina" : ("", " m/s\n")
}

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

for g in root:
  if g.tag in l:
    print(l[g.tag][0], g.text, l[g.tag][1])
  if g.tag == 'Podatci':
      for p in g:
        if p.tag in l:
          print(l[p.tag][0], p.text + l[p.tag][1],end = "")
Odgovori