2016-12-29 16 views
0

XMLファイルから2つの異なる要素を取得しようとしています。私は散布図上でxとyとしてそれらを印刷しようとしています。私は両方の要素を得ることができますが、1つのリストは長さが長く、他のものは50だけです。特定のXML属性のみを選択する文の場合

ifステートメントを追加すると、windSpeed要素が関連付けられた要素が選択されます。

url = "http://api.met.no/weatherapi/locationforecast/1.9/?lat=52.41616;lon=-4.064598" 
response = requests.get(url) 
xml_text=response.text 
weather= bs4.BeautifulSoup(xml_text, "xml") 
f = open('file.xml', "w") 
f.write(weather.prettify()) 
f.close() 

私は、時間(from)要素と(windSpeed > mps)要素や属性を取得しようとしています。可能であればBeautifulsoupを使用したい、まっすぐなifループが大好きです。

with open ('file.xml') as file: 
    soup = bs4.BeautifulSoup(file, "xml") 
    times = soup.find_all("time") 
    windspeed = soup.select("windSpeed") 
    form = ("%Y-%m-%dT%H:%M:%SZ") 

    x = [] 
    y = [] 
    for element in times: 
     time = element.get("from") 
     t = datetime.datetime.strptime(time, form) 
     x.append(t) 

    for mps in windspeed: 
     speed = mps.get("mps") 
     y.append(speed) 

    plt.scatter(x, y)   
    plt.show() 

私はそれが次のエラーを発生させ実行

raise ValueError("x and y must be the same size") 
ValueError: x and y must be the same size 

私はリストの長さには違いがあるからだと仮定しています。 私はおそらく、それを修正する簡単な方法があることを知っています、任意のアイデアは素晴らしいだろう。

+0

別々のループを持つのではなく、時刻項目を追加する前に 'windspeed'要素がある場合は、' times in:element 'の内部でチェックできますか? – usr2564301

答えて

2

コードスニペットを次のように変更してください。長さの問題を解決します。

+0

ありがとう、それは私が必要だったものです。私は何かが欠けていることを知っていました。私はそれを理解できませんでした。 –

関連する問題