2016-12-29 5 views
0

Я пытаюсь получить два разных элемента из файла XML; Я пытаюсь напечатать их как x и y на участке разброса. Мне удастся получить оба элемента, но один список длится 155, а другой - только 50.Оператор if только для определенных атрибутов XML

Поэтому мне нужно добавить оператор if, чтобы выбрать элементы from, которые имеют ассоциированный элемент 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

Для того, – usr2564301

ответ

2

Просто измените фрагмент кода следующим образом. Это решит проблему длины.

.... 
for element in times: 
    time = element.get("from") 
    t = datetime.datetime.strptime(time, form) 
    if element.find('windSpeed'): 
     x.append(t) 
.... 
+0

Большое спасибо, вот что мне нужно, я знал, что чего-то не хватает, и я просто не мог понять. –

Смежные вопросы