2012-10-23 187 views
0

我有一個基本的腳本,可以解析溫度,露點,高度計等,但是,我怎樣才能解析條件字符串像天空條件?我想解析這些數據並打印出來:「天空條件:例如在2000英尺AGL上很少」。蟒蛇解析xml

import xml.etree.ElementTree as ET 
from urllib import urlopen 

link = urlopen('http://weather.aero/dataserver_current/httpparam?dataSource=metars&  requestType=retrieve&format=xml&stationString=KSFO&hoursBeforeNow=1') 

tree = ET.parse(link) 
root = tree.getroot() 

data = root.findall('data/METAR') 
for metar in data: 
    print metar.find('temp_c').text 
+1

你可能應該包括一個說明性的XML示例。 –

回答

2

您檢索的頁面有一個結構是這樣的:

<METAR> 
    <!-- snip --> 
    <sky_condition sky_cover="FEW" cloud_base_ft_agl="2000"/> 
    <sky_condition sky_cover="BKN" cloud_base_ft_agl="18000"/> 
</METAR> 

所以,你問什麼是如何提取XML屬性。 The xml.etree.ElementTree docs指出這些文件存儲在名爲attrib的字典中。所以你的代碼看起來像這樣:

data = root.findall('data/METAR') 
for sky in data.findall('sky_condition'): 
    print "Sky Condition: {0} at {1} ft AGL".format(
     sky.attrib['sky_cover'], 
     sky.attrib['cloud_base_ft_agl'] 
    ) 
+2

啊,打我吧:)如果你想減少更多的線條,你可以嘗試'print'Sky Condition:{sky_cover} at cloud_base_ft_agl}'.format(** sky.attrib)',但是你更適合「明確優於隱式」模式。 – RocketDonkey

+0

@RocketDonkey它覺得應該有一種方法來做到這一點。我忘記了「unmapping」操作符('**')。 +1 – bonsaiviking

+0

哈,以及我認爲你的版本做的更好解釋,所以+1返回atcha :) – RocketDonkey