Форум сайта python.su
TenebrasМожно проверять через is None.
в некоторых из nodes отсутствует некая информация и программа прерывается. Как это обойти?
Офлайн
Он выдаёт AttributeError.
Возможно как-то обрабатывать AttributeError?
is None сейчас попробую
Благодарю!
Офлайн
Новая загвоздка. У меня в блоке встречается не редко по две-три строки <sky_condition … >
Обрабатывается только одна. Не пойму - как тут грамотно прикрутить цикл, что бы обрабатывало все строки.
#!/usr/bin/env python # coding:utf8 from lxml import etree import urllib url = 'https://aviationweather.gov/adds/dataserver_current/current/metars.cache.xml' urllib.urlretrieve(url, filename='metar.xml') tree = etree.parse('metar.xml') # Парсинг файла block = tree.xpath('/response/data/METAR') for bl in block: ikao = bl.find('station_id').text clouds = bl.find('sky_condition') if clouds is None: continue cloud = clouds.get('sky_cover') print ikao, cloud
Офлайн
Не оно?
clouds = bl.findall('sky_condition') if clouds is None: continue for c in clouds: cloud = c.get('sky_cover') print ikao, cloud
Офлайн
#... for bl in block: ikao = bl.find('station_id').text clouds = bl.findall('sky_condition') out = [] for i in clouds: out.append(i.get('sky_cover')) print ikao,' '.join(out)
Отредактировано vic57 (Фев. 28, 2017 19:52:27)
Офлайн
Уважаемый vic57, объясните мне, пожалуйста назначение
,' '.join(out)
Офлайн
>>> l =['qwe','asd','dfg'] >>> l ['qwe', 'asd', 'dfg'] >>> ' '.join(l) 'qwe asd dfg' >>> ':'.join(l) 'qwe:asd:dfg' >>>
#... for bl in block: ikao = bl.find('station_id').text clouds = bl.findall('sky_condition') out = '' for i in clouds: out += i.get('sky_cover')+ ' ' print ikao,out
Отредактировано vic57 (Фев. 28, 2017 20:32:42)
Офлайн
Кажется первый вариант более простой)))
Офлайн
Не хочу ради такого простого вопроса создавать новую тему. Тем более оно имеет отношение к этой.
Я из xml беру время. Как мне его грамотно разбить?
Я делаю так:
#... time = '2017-02-28T20:55:00Z' tim = time.split(r'T') ti = tim[1].split(r':') t = ti[0]+':'+ti[1] print t
# a = 1.00 b = 0.75 c = 0.00 x = [a,b,c] print min(x)
Отредактировано Tenebras (Фев. 28, 2017 23:37:22)
Офлайн
Можно через регулярные выражения, но не факт что быстрее. Надо проверить на скорость.
import re t = '2017-02-28T20:55:00Z' print(re.findall(re.compile(r'(\d{1,2}:\d{1,2})'), t))
Офлайн