Python 天气数据JSON解析

Python 天气数据JSON解析,python,json,parsing,Python,Json,Parsing,我目前正在开发一个从http请求解析json数据的程序,我似乎遇到了程序在连续使用时无法正确解析json的问题。我回到过去,在一系列失败的试验中尝试了单一试验,发现它们成功地正确解析了数据 以下是数据示例: {"latitude":-35.2809,"longitude":149.13,"timezone":"Australia/Sydney","offset":10,"hourly":{"summary":"Clear throughout the day.","icon":"clear-da

我目前正在开发一个从http请求解析json数据的程序,我似乎遇到了程序在连续使用时无法正确解析json的问题。我回到过去,在一系列失败的试验中尝试了单一试验,发现它们成功地正确解析了数据

以下是数据示例:

{"latitude":-35.2809,"longitude":149.13,"timezone":"Australia/Sydney","offset":10,"hourly":{"summary":"Clear throughout the day.","icon":"clear-day","data":[{"time":1492610400,"summary":"Clear","icon":"clear-night","precipType":"rain","temperature":48.24,"apparentTemperature":48.24,"dewPoint":47.73,"humidity":0.98,"windSpeed":2.91,"windBearing":152,"visibility":5.65,"cloudCover":0.03,"pressure":1030},{"time":1492614000,"summary":"Clear","icon":"clear-night","precipType":"rain","temperature":48.42,"apparentTemperature":48.42,"dewPoint":48.42,"humidity":1,"windSpeed":0,"visibility":6.2,"pressure":1029.99},{"time":1492617600,"summary":"Clear","icon":"clear-night","precipType":"rain","temperature":48.56,"apparentTemperature":47.7,"dewPoint":48.05,"humidity":0.98,"windSpeed":3.38,"windBearing":31,"visibility":6.2,"pressure":1029.74},{"time":1492621200,"summary":"Foggy","icon":"fog","precipType":"rain","temperature":46.49,"apparentTemperature":46.49,"dewPoint":45.93,"humidity":0.98,"windSpeed":0.69,"windBearing":16,"visibility":0.59,"cloudCover":0.14,"pressure":1029.42},{"time":1492624800,"summary":"Clear","icon":"clear-night","precipType":"rain","temperature":48.35,"apparentTemperature":46.51,"dewPoint":48.35,"humidity":1,"windSpeed":4.65,"windBearing":167,"visibility":6.2,"pressure":1029.58},{"time":1492628400,"summary":"Clear","icon":"clear-night","precipType":"rain","temperature":46.73,"apparentTemperature":46.73,"dewPoint":46.25,"humidity":0.98,"windSpeed":1.05,"windBearing":7,"visibility":6.2,"pressure":1029.61},{"time":1492632000,"summary":"Mostly Cloudy","icon":"partly-cloudy-night","precipType":"rain","temperature":47.05,"apparentTemperature":47.05,"dewPoint":45.96,"humidity":0.96,"windSpeed":2.95,"windBearing":90,"visibility":5.61,"cloudCover":0.75,"pressure":1029.93},{"time":1492635600,"summary":"Clear","icon":"clear-day","precipType":"rain","temperature":49.93,"apparentTemperature":49.93,"dewPoint":49.93,"humidity":1,"windSpeed":2.86,"windBearing":90,"visibility":6.2,"pressure":1030.28},{"time":1492639200,"summary":"Clear","icon":"clear-day","precipType":"rain","temperature":52.4,"apparentTemperature":52.4,"dewPoint":51.47,"humidity":0.97,"windSpeed":2.32,"windBearing":101,"visibility":6.2,"pressure":1030.84},{"time":1492642800,"summary":"Overcast","icon":"cloudy","precipType":"rain","temperature":56.47,"apparentTemperature":56.47,"dewPoint":52.32,"humidity":0.86,"windSpeed":1.51,"windBearing":68,"visibility":5.25,"cloudCover":1,"pressure":1031.06},{"time":1492646400,"summary":"Clear","icon":"clear-day","precipType":"rain","temperature":62.51,"apparentTemperature":62.51,"dewPoint":54.09,"humidity":0.74,"windSpeed":4.85,"windBearing":61,"visibility":6.2,"pressure":1030.51},{"time":1492650000,"summary":"Clear","icon":"clear-day","precipType":"rain","temperature":64.46,"apparentTemperature":64.46,"dewPoint":51.78,"humidity":0.63,"windSpeed":1.28,"windBearing":337,"visibility":6.2,"pressure":1029.87},{"time":1492653600,"summary":"Clear","icon":"clear-day","precipType":"rain","temperature":67.6,"apparentTemperature":67.6,"dewPoint":49.74,"humidity":0.53,"windSpeed":4.52,"windBearing":3,"visibility":6.2,"pressure":1028.82},{"time":1492657200,"summary":"Clear","icon":"clear-day","precipType":"rain","temperature":69.93,"apparentTemperature":69.93,"dewPoint":48.56,"humidity":0.47,"windSpeed":5.43,"windBearing":225,"visibility":6.2,"pressure":1028.01},{"time":1492660800,"summary":"Clear","icon":"clear-day","precipType":"rain","temperature":69.82,"apparentTemperature":69.82,"dewPoint":47.8,"humidity":0.46,"windSpeed":3.54,"windBearing":311,"visibility":6.2,"pressure":1026.99},{"time":1492664400,"summary":"Partly Cloudy","icon":"partly-cloudy-day","precipType":"rain","temperature":69.81,"apparentTemperature":69.81,"dewPoint":46.36,"humidity":0.43,"windSpeed":5.82,"windBearing":350,"visibility":6.79,"cloudCover":0.31,"pressure":1026.38},{"time":1492668000,"summary":"Clear","icon":"clear-day","precipType":"rain","temperature":69.72,"apparentTemperature":69.72,"dewPoint":48.89,"humidity":0.48,"windSpeed":5.73,"windBearing":265,"visibility":6.2,"pressure":1026.34},{"time":1492671600,"summary":"Clear","icon":"clear-day","precipType":"rain","temperature":64.75,"apparentTemperature":64.75,"dewPoint":47.57,"humidity":0.54,"windSpeed":3.76,"windBearing":307,"visibility":6.2,"pressure":1026.36},{"time":1492675200,"summary":"Partly Cloudy","icon":"partly-cloudy-night","precipType":"rain","temperature":57.57,"apparentTemperature":57.57,"dewPoint":48.9,"humidity":0.73,"windSpeed":4.49,"windBearing":67,"visibility":6.2,"cloudCover":0.31,"pressure":1026.83},{"time":1492678800,"summary":"Clear","icon":"clear-night","precipType":"rain","temperature":62.72,"apparentTemperature":62.72,"dewPoint":48.74,"humidity":0.6,"windSpeed":8.12,"windBearing":77,"pressure":1027.15},{"time":1492682400,"summary":"Clear","icon":"clear-night","precipType":"rain","temperature":54.89,"apparentTemperature":54.89,"dewPoint":46.81,"humidity":0.74,"windSpeed":2.82,"windBearing":84,"pressure":1027.33},{"time":1492686000,"summary":"Clear","icon":"clear-night","precipType":"rain","temperature":54.22,"apparentTemperature":54.22,"dewPoint":47.43,"humidity":0.78,"windSpeed":1.91,"windBearing":63,"visibility":6.2,"cloudCover":0.02,"pressure":1027.75},{"time":1492689600,"summary":"Clear","icon":"clear-night","precipType":"rain","temperature":54.21,"apparentTemperature":54.21,"dewPoint":48.32,"humidity":0.8,"windSpeed":1.51,"windBearing":190,"visibility":6.2,"cloudCover":0,"pressure":1027.64},{"time":1492693200,"summary":"Clear","icon":"clear-night","precipType":"rain","temperature":52.26,"apparentTemperature":52.26,"dewPoint":47.73,"humidity":0.85,"windSpeed":2.65,"windBearing":81,"visibility":6.2,"cloudCover":0,"pressure":1027.49}]},"daily":{"data":[{"time":1492610400,"summary":"Clear throughout the day.","icon":"clear-day","sunriseTime":1492633936,"sunsetTime":1492673690,"moonPhase":0.77,"precipType":"rain","temperatureMin":46.49,"temperatureMinTime":1492621200,"temperatureMax":69.93,"temperatureMaxTime":1492657200,"apparentTemperatureMin":46.49,"apparentTemperatureMinTime":1492621200,"apparentTemperatureMax":69.93,"apparentTemperatureMaxTime":1492657200,"dewPoint":48.63,"humidity":0.77,"windSpeed":1.07,"windBearing":53,"visibility":5.88,"cloudCover":0.28,"pressure":1028.66}]}}
代码如下:

def truncate(listName):
ret=listName[:len(listName)-1]
return(ret)


#init var
unixtime="11177678800"
timeW,bearingW,speedW,humidityW,dewptW,tempW=([] for i in range(6))
timeTmp,bearingTmp,speedTmp,humidityTmp,dewptTmp,tempTmp=([] for i in range(6))

#prepare data file
if(os.path.exists('weatherData.txt')):
    with open('weatherData.txt', 'r') as f:
        txtData = f.readlines()
        for line in txtData:
            if "time" in line:
                timeW += re.findall(r'\d+', line[6:])
            elif "windBearing" in line:
                bearingW += re.findall(r'\d+', line[12:])
            elif "windSpeed" in line:
                speedW += re.findall(r'\d+.\d+', line[10:])
            elif "humidity" in line:
                humidityW += re.findall(r'\d+.\d+', line[10:])
            elif "dewpt" in line:
                dewptW = re.findall(r'\d+.\d+', line[6:])
            elif "temp" in line:
                tempW = re.findall(r'\d+.\d+', line[5:])
    os.remove('weatherData.txt')

for i in range(10):
    print("parsing")
    url ="https://api.darksky.net/forecast/47c7da943ef96bcbe26ddf4ac4f885bd/-35.2809,149.13,{0}?exclude=currently%2Cflags".format(unixtime)
    print(url)
    data = str(*urllib.request.urlopen(url))
    timeTmp = re.findall(r'(?<=time":)\d+',data)
    bearingTmp = re.findall(r'(?<=windBearing":)\d+', data)
    speedTmp = re.findall(r'(?<=windSpeed":)(\d+.?\d+|\d+)', data)
    humidityTmp = re.findall(r'(?<=humidity":)(\d+.?\d+|\d+)', data)
    dewptTmp = re.findall(r'(?<=dewPoint":)(\d+.?\d+|\d+)', data)
    tempTmp = re.findall(r'(?<=temperature":)(\d+.?\d+|\d+)', data)
    timeTmp = truncate(timeTmp)
    bearingTmp = truncate(bearingTmp)
    speedTmp = truncate(speedTmp)
    humidityTmp = truncate(humidityTmp)
    dewptTmp = truncate(dewptTmp)
    maxTime=int(max(timeTmp))
    unixtime = str(maxTime + 4000)
def truncate(列表名):
ret=listName[:len(listName)-1]
返回(ret)
#初始化变量
unixtime=“11177678800”
timeW、bearingW、speedW、humidity、dewptW、tempW=([]表示范围(6)中的i)
timeTmp、bearingTmp、speedTmp、humidityTmp、DEWPTMP、TENTMP=([]表示范围(6)内的i)
#准备数据文件
如果(os.path.exists('weatherData.txt')):
以open('weatherData.txt','r')作为f:
txtData=f.readlines()
对于txtData中的行:
如果行中有“时间”:
timeW+=re.findall(r'\d+',第[6:]行)
elif“风向标”行:
bearingW+=re.findall(r'\d+',第[12:]行)
elif“风速”在线:
speedW+=re.findall(r'\d+。\d+',第[10]行)
elif“湿度”在线:
humidityW+=re.findall(r'\d+.\d+',第[10]行)
行中的elif“dewpt”:
dewptW=re.findall(r'\d+.\d+',第[6:]行)
行中的elif“temp”:
tempW=re.findall(r'\d+.\d+',第[5:]行)
删除('weatherData.txt')
对于范围(10)内的i:
打印(“解析”)
url=”https://api.darksky.net/forecast/47c7da943ef96bcbe26ddf4ac4f885bd/-35.2809,149.13,{0}?排除=当前为%2Cflags“。格式(unixtime)
打印(url)
data=str(*urllib.request.urlopen(url))

timeTmp=re.findall(r’(?不要使用正则表达式,使用
json
jsontree
模块加载数据

import json
import requests
with open('weatherData.txt', 'r') as f:
   weather = json.loads(f)

latitude = weather['latitude']
hour_summary = weather['hourly']['summary']
daily_icon = weather['daily']['data'][0]['icon']
.....
jsontree将元素转换为符号。但是,它不支持Python 3

内置的urllib模块相当麻烦,请使用
请求
包,例如

import requests
response = requests(url)
data = response.json()
#Just use the typical python dict traverse method as shown in above code. 

这不仅仅是一个数据样本。代码中的错误在哪里?请尝试使用
json
模块…您使解析变得比必要的复杂得多。我建议编辑的字符太少,但是您的
def truncate
在这里缩进错误-还有list\u name=list\u name[:-1]做同样的事情。在回答您的问题时,您可能应该按照建议使用json模块,或者看在上帝的份上,看看熊猫,使用
json
模块,或者更好的是,在这里使用
python requests
,然后使用
response.json()
method。谢谢大家的建议,我不知道json模块,因为这是我第一次用python处理json数据。我将尝试一下