我想在我的python代码中显示平均值。
我找到http://openweathermap.org/,我们使用他们的API制作了以下代码:
import pyowm
api = pyowm.OWM('Your API key')
collectinfo = api.weather_at_place("Gorinchem,nl")
short = collectinfo.get_weather()
temperature = short.get_temperature('celsius')
print(temperature)
然而,tempature函数显示多个变量,例如
temp':18.72,'temp_max':20.0,'temp_min':17.0,'temp_kf':无
我想将平均句子写入变量,以便我可以在我的程序中使用它。
经过一番搜索,我找到了以下代码:average_temperature(unit='kelvin')
的一部分
class pyowm.webapi25.historian.Historian(station_history)
指向文档的链接:https://pyowm.readthedocs.io/en/latest/pyowm.webapi25.html#module-pyowm.webapi25.observation
(使用ctrl + f,搜索摄氏度,它是第一个弹出的)
我不知道如何将该功能用于平均温度。
任何可以帮助首发编码员的人:)?
答案 0 :(得分:1)
字符串的格式适合初始化python dict。
s = "'temp': 18.72, 'temp_max': 20.0, 'temp_min': 17.0, 'temp_kf': None"
data = eval('{{{}}}'.format(s))
print data['temp']
请注意,我在字符串的开头添加了一个缺少的'
。
请注意,eval
的使用通常被认为是一种安全风险,因为该字符串可能包含可能在调用eval时执行的恶意python代码。
另一种方法是使用正则表达式改进字符串的解析,例如您可以过滤所有小数值,并依赖于您要查找的值始终位于某个位置的事实:
import re
s = "'temp': 18.72, 'temp_max': 20.0, 'temp_min': 17.0, 'temp_kf': None"
temperatures = [float(q) for q in re.findall(r'([\d\.]+)', s)]
答案 1 :(得分:1)
好吧,我最近遇到了同样的问题,并且在不使用不知道如何使用该函数的情况下,更容易知道如何从初始结果中获取所需的数据!
observation = self.owm.weather_at_place("Gorinchem,nl")
w = observation.get_weather()
temperature = w.get_temperature('celsius')
此刻将向我们输出:{'temp': 8.52, 'temp_max': 10.0, 'temp_min': 7.22, 'temp_kf': None}
但是我们需要了解这是什么样的结果:
print(type(temperature))
这将向我们输出结果的类型:
<class 'dict'>
有了这个,我们现在知道如果访问密钥,就可以分别访问值:
avgTemp=temperature['temp']
这是因为平均温度(8.52
)的关键是'temp'
。
为确保您可以使用它,我们需要知道它是什么类型:
print(type(tempMedia))
哪个会输出:
<class 'float'>
答案 2 :(得分:0)
我以不可靠的方式解决了这个问题。我将输出转换为字符串。 然后我就拉出了我需要的角色。最后我将它们组合在一起。 这是一种丑陋的方式,但至少我可以继续。如果有人知道更好的解决方案,请继续!
s = "temp': 18.72, 'temp_max': 20.0, 'temp_min': 17.0, 'temp_kf': None"
h1 =s[7]
h2 =s[8]
k1=s[10]
print(h1+h2+","+k1)