Форум сайта python.su
Tenebras, тебе уже объясняли
#!/usr/bin/env python # coding: utf8 import urllib from metar import Metar def load_data(url): out = None data = urllib.urlopen(url) for line in data: if 'Data at:' in line: break line = data.readline() if '<!-- Data starts here -->' in line: line = data.readline() out = line.split('<b', 1)[0] data.close() return out if __name__=="__main__": st = ['UKBB', 'ULMM', 'ULAA', 'UHMA', 'UIBB', 'UUEE', 'EGLL', 'PABR', 'BIRK', ] for i in st: url='http://aviationweather.gov/metar/data?ids='+i+'&format=raw&hours=1&taf=off&layout=off&date=0' s = load_data(url) ods = Metar.Metar(s) print '*' print ods.string()
Отредактировано vic57 (Окт. 16, 2016 01:06:19)
Офлайн
Спасибо. Но я не достоин пока принять на себя дары такие.
Ну правда - дали мне задание так вот сделать, я и делаю. А вот подобным способом я для себя попробую. За что и спасибо - старания отвечающего не пропадут зря!!!
Кстати, вопрос к МОЕМУ сирому и убогому коду:
# Извлекаем дату и время for i in par: if i[-1] == 'Z': timeUTC = int(i[2:4]) strtime = str(timeUTC) st = strtime+':'+i[4:6] break
Офлайн
i = par[1] if i[-1] == 'Z' # и т.д.
Отредактировано vic57 (Окт. 16, 2016 02:23:49)
Офлайн
Благодарю!
Кстати - про метар библиотеки: тяжко мне их освоить.
Пока путных мануалов не нашёл…
Но согласен, что вещь вкусная.
Офлайн
fd = open("stations.txt") # Read data reader = csv.reader(fd, delimiter='\t') for row in reader: # Индекс ICAO-станции station = row[0] # Создаем сокет-соединение с сервером sock = urllib.urlopen("http://aviationweather.gov/metar/data?ids="+station+"&format=raw&hours=0&taf=off&layout=off&date=0") # Записываем текст HTML-файла в переменную "metar" metar = sock.read() # Закрываем сокет-соединение с сервером sock.close() # Разбиваем текст на отдельные строки lines = metar.split('\n') # Ищем строку, предшествующую строке с данными METAR-телеграммы index = lines.index("<!-- Data starts here -->") par = lines[index+1] if not "No METAR found" in par: lst = par.split() # Извлекаем дату и время i = lst[1] if i[-1] == 'Z': timeUTC = int(i[2:4]) strtime = str(timeUTC) print strtime+':'+i[4:6], # Получаем значение об облаках if "SKC" in lst: print '0.00' elif "NSC" in lst: print '0.00' elif "FEW" in lst: print '0.15' elif 'SCT' in lst: print '0.40' elif 'BKN' in lst: print '0.75' elif 'OVC' in lst: print '1.00' elif 'CAVOK' in lst: print 'CAVOK' elif 'NCD' in lst: print 'NCD' else: print 'no data' else: print par.split('<')[1][2:]
Отредактировано vic57 (Окт. 16, 2016 03:20:28)
Офлайн
Благодарю! И самый последний вопрос по этой программе:
Как запись в файл наладить? Всего, что выводится на терминал.
Офлайн
TenebrasА вот этого не надо делать. Вы уже вкусили парсинга данных, формат которых не был продуман при разработке. Потратили кучу времени. Для записи применяйте формат который будет легко потом использовать и вам и другим людям.
Как запись в файл наладить? Всего, что выводится на терминал.
Отредактировано doza_and (Окт. 16, 2016 08:34:55)
Офлайн
vic57
Tenebras, тебе уже объясняли
13:00 08.0 1038.0 Traceback (most recent call last): File "ger.py", line 31, in <module> ods = metar.metar(s) AttributeError: 'str' object has no attribute 'metar'
from metar import Metar
from metar import metar
Отредактировано Tenebras (Окт. 16, 2016 16:26:11)
Офлайн
Стесняюсь спросить, а Вы установили библиотеку metar.
И второе, в Вашем коде, еще до того как вы начали использовать бибилиотеку metar, есть переменная с именем metar, которой вы присваиваете строку. Это может вызвать конфликт имен или их переопределения.
# Записываем текст HTML-файла в переменную "metar" metar = sock.read()
Отредактировано Romissevd (Окт. 16, 2016 16:40:50)
Офлайн
Romissevd
Стесняюсь спросить, а Вы установили библиотеку metar.
Romissevd
в Вашем коде
Офлайн