2015-02-24 80 views
0

我想從國家氣象服務中收集天氣數據並將其讀入python腳本。他們提供了一個JSON返回,但他們還提供了另一個沒有格式化JSON的返回,但有更多的變量(我想要的)。這組數據看起來像它被格式化爲一個Python字典。它看起來像這樣:來自url的python字典

stations={ 
KAPC: 
{ 
'id':'KAPC', 
'stnid':'92', 
'name':'Napa, Napa County Airport', 
'elev':'33', 
'latitude':'38.20750', 
'longitude':'-122.27944', 
'distance':'', 
'provider':'NWS/FAA', 
'link':'http://www.wrh.noaa.gov/mesowest/getobext.php?sid=KAPC', 
'Date':'24 Feb 8:54 am', 
'Temp':'39', 
'TempC':'4', 
'Dewp':'29', 
'Relh':'67', 
'Wind':'[email protected]', 
'Direction':'50&#176', 
'Winds':'6', 
'WindChill':'35', 
'Windd':'50', 
'SLP':'1027.1', 
'Altimeter':'30.36', 
'Weather':'', 
'Visibility':'10.00', 
'Wx':'', 
'Clouds':'CLR', 
[...] 

所以,對我來說,它看起來像它拿到定義的變量等於包含電臺及其變量字典詞典站。我的問題是我如何訪問這些數據。現在我試圖:

import urllib 
response = urrllib.urlopen(url) 
r = response.read() 

如果我嘗試使用JSON模塊,它顯然失敗,因爲這不是json。如果我只是嘗試閱讀文件,它會返回一長串字符。有關如何提取這些數據的任何建議?如果可能,我只想獲取字典,因爲它存在於url返回中,即stations={...}謝謝!

+2

你能提供一個返回要分析,所以我們可以看到數據的示例URL的任何屬性完整的輸出? – FatalError 2015-02-24 16:56:05

+0

您可以使用RegExp ....獲取您想要的數據。但也可以使用JSON庫幫助完成 – 2015-02-24 16:58:14

+0

以下是一個示例url ... http://www.wrh.noaa.gov/mesowest/GmwXJList .php?extents = 35.755148,-124.279663,38.813761,-119.720337&zoom = 8&mapsize = 830px,700px&density = 1& – 2015-02-24 17:04:27

回答

0

請參閱我從這個問題推斷,我假設你有文本形式的數據,而不是有效的JSON數據,所以我們有如下文本:line = "stations={'KAPC':{'id':'KAPC', 'stnid':'92', 'name':'Napa, Napa County Airport'}}"(說),然後我們可以提取字典通過將它拆分爲=符號,然後使用eval()方法,該方法用所需的數據初始化字典變量。

dictionary_text = line.split("=")[1] 

python_dictionary = eval(dictionary_text) 

print python_dictionary 
>>> {'KAPC': {'id': 'KAPC', 'name': 'Napa, Napa County Airport', 'stnid': '92'}} 

python_dictionary現在的行爲像一個Python解釋與關鍵,值對,您可以訪問使用python_dictionary["KAPC"]["id"]

+0

這是一個非常優雅的解決方案,但我看到兩個問題。其中一個是station id,在這個例子中'KAPC'沒有被引用,所以這可能會引發一個錯誤,因爲它沒有被定義(?)。此外,記錄還包含一個URL字段,其中包含一個'sid ='請求,它在嘗試split(「=」)'時會將所有內容混淆。 – 2015-02-24 17:15:53