2015-02-24 110 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