从Python的列表中删除DateTime.DateTime



我正在尝试从XML文件中获取2个不同的元素,我正在尝试将它们打印为X和y在散点图上,我可以设法获得两个元素但是,当我绘制它们时,它只使用一个日期来绘制其他元素。我正在使用以下代码获取天气HTML并将其保存为XML。

        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()

然后,我试图获得时间('来自')元素和('Windspeed'>'MPS')元素和属性。然后,我试图将其绘制为X和Y在散点图上。

 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() 

我正在尝试从2个循环中列出2个列表,然后将它们读取为X和Y,但是当我运行时会出现错误。 提高价值Error(" X和Y必须相同的大小")ValueError:X和Y必须是相同的大小

我假设是因为它将列表打印为dateTime.dateTime(2016,12,22,21,0),我如何从列表中删除dateTime.dateTime。

我知道可能有一种简单的方法来修复它,任何想法都很棒,您在堆栈上的人们在学习编码方面对我有很大帮助。谢谢

只需简单地制作一个包含X轴值的两个列表,另一个包含Y轴值,然后传递到散点函数

plt.scatter(List1,List2);

我建议您使用 lxml 分析XML,因为它使您能够使用XPATH表达式,这可以使生活更轻松。在这种情况下,并非每次入口都包含风速条目。因此,必须先确定风速条目,然后获得相关时间。此代码这样做。我通常会遇到两个小问题:(1)我仍然需要与XPath"玩"才能正确处理;(2)有时候我期待单身人士时会得到一个列表,这就是为什么代码中有" [0]"的原因。我发现最好以交互方式构建代码。

>>> from lxml import etree
>>> XML = open('file.xml')
>>> tree = etree.parse(XML)
>>> for count, windSpeeds in enumerate(tree.xpath('//windSpeed')):
...     windSpeeds.attrib['mps'], windSpeeds.xpath('../..')[0].attrib['from']
...     if count>5:
...         break
...     
('3.9', '2016-12-29T18:00:00Z')
('4.8', '2016-12-29T21:00:00Z')
('5.0', '2016-12-30T00:00:00Z')
('4.5', '2016-12-30T03:00:00Z')
('4.1', '2016-12-30T06:00:00Z')
('3.8', '2016-12-30T09:00:00Z')
('4.4', '2016-12-30T12:00:00Z')

最新更新