2017-06-01 5 views
0

平均的なtemptureを私のPythonコードに表示したいと思います。平均体温(python)を取得するpyowmを使用

私は、次のコードを作った彼らのAPIで、http://openweathermap.org/が見つかりました:まだtempature機能は、例えば、複数の変数が表示され

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) 

一時 ':18.72、 'temp_max':20.0、 'temp_min':17.0、 'temp_kf':なし

は、私は私ができるように、ちょうど平均temptureが変数に書かれているのが好きないだろう私のプログラムでそれを使用してください。それはhttps://pyowm.readthedocs.io/en/latest/pyowm.webapi25.html#module-pyowm.webapi25.observation

(使用CTRL + F、摂氏の検索:ドキュメントへ

class pyowm.webapi25.historian.Historian(station_history) 

リンクの一部

average_temperature(unit='kelvin') 

いくつか検索した後、私は次のコード行を見つけました

私はそれを使用する手がかりがありません平均温度に対する関数。

開始コーダーを助けることができる人は誰ですか:))?

答えて

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コードを含む可能性があるため、セキュリティ上のリスクと考えられます。

もう1つの方法は、正規表現を使用して文字列の解析を改善することです。あなたはすべて小数点以下の値をフィルタリングし、あなたが探している値は、特定の位置に常にあるという事実に頼ることができる:私は、私が使用していますどのようなAPIを知っている、と私はそれが悪意があるだろうと思ういけない

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)] 
+0

。 evalのセキュリティ上のリスクはありません。 –

+0

@AntonvanderWel私はそう思います。 –

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) 
関連する問題