удаление datetime.datetime из списка в python

Я пытаюсь получить 2 различных элемента из XML-файла, я пытаюсь напечатать их как 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()

Затем я пытаюсь получить элемент time (‘from’) и (‘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, но когда я запускаю его, это дает ошибку;
raise ValueError («x и y должны быть одинакового размера»)
ValueError: x и y должны быть одинакового размера

Я предполагаю, что это потому, что он печатает список как datetime.datetime(2016, 12, 22, 21, 0), Как удалить datetime.datetime из списка.

Я знаю, что, вероятно, есть простой способ исправить это, любые идеи были бы отличными, вы, люди здесь на стеке, очень помогаете мне с обучением коду. Спасибо

2 ответа

  1. Просто составьте два списка, один из которых содержит значения оси x, а другой — значения оси y, и перейдите в функцию scatter

    plt.scatter (list1, list2);

  2. Я предлагаю использовать lxml для анализа xml, потому что это дает вам возможность использовать выражения xpath, которые могут сделать жизнь намного проще. В этом случае не каждый раз, когда запись содержит запись windSpeed; поэтому важно сначала определить записи windSpeed, а затем получить связанное время. Этот код делает это. Есть две небольшие проблемы, с которыми я обычно сталкиваюсь: (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')