if语句只选择某些XML属性

时间:2016-12-29 19:58:29

标签: python xml

我试图从XML文件中获取2个不同的元素;我试图在散点图上将它们打印为x和y。我可以设法获得这两个元素,但是一个列表长155个,另一个列表只有50个。

因此,我需要添加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

我假设它是因为列表的长度不同。 我知道这可能是解决它的一种简单方法,任何想法都会很棒。

1 个答案:

答案 0 :(得分:2)

只需修改您的代码段,如下所示。它将解决长度问题。

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