Найти - Пользователи
Полная версия: Несколько вопросов по программе
Начало » Центр помощи » Несколько вопросов по программе
1 2 3 4 5 6
vic57
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()
    
 
Tenebras
Спасибо. Но я не достоин пока принять на себя дары такие.

Ну правда - дали мне задание так вот сделать, я и делаю. А вот подобным способом я для себя попробую. За что и спасибо - старания отвечающего не пропадут зря!!!

Кстати, вопрос к МОЕМУ сирому и убогому коду:

 # Извлекаем дату и время
            for i in par:
                if i[-1] == 'Z':
                    timeUTC = int(i[2:4])
                    strtime = str(timeUTC)
                    st = strtime+':'+i[4:6]
                    break

Вот по поводу этого кусочка. Дело в том, что в телеграмме, которую я обрабатываю попадаются комбинации, типа CZ или FZ. Натыкаясь на это программа глючит, так как эти буковки ко времени не относятся. Как можно указать программе, что бы она игнорила подобные казусы?

Собственно мне нужна исключительно первая буква Z из телегшраммы - остальные не нужно. Время указанно так: 152230Z
Что в переводе на русский обозначает 22 часа 30 минут
vic57
 i = par[1]
if i[-1] == 'Z'
# и т.д.
время в метар-строке идет 2 элементом
Tenebras
Благодарю!

Кстати - про метар библиотеки: тяжко мне их освоить.
Пока путных мануалов не нашёл…
Но согласен, что вещь вкусная.
vic57
 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:]
Tenebras
Благодарю! И самый последний вопрос по этой программе:

Как запись в файл наладить? Всего, что выводится на терминал.
doza_and
Tenebras
Как запись в файл наладить? Всего, что выводится на терминал.
А вот этого не надо делать. Вы уже вкусили парсинга данных, формат которых не был продуман при разработке. Потратили кучу времени. Для записи применяйте формат который будет легко потом использовать и вам и другим людям.


Самое простое использовать json. https://docs.python.org/3/library/json.html https://docs.python.org/2/library/json.html

Для этого надо не просто печатать данные, а накапливать их в списках, словарях и т.п. Хороший тон числа записывать в виде чисел а не строк.

p.s.
для совсем ленивых, или если у вас только 2 секунды времени на получение результата. Можно стразу перенаправить результат из командной строки python script >a.txt или
использовать tee если вам любопытно что получается
https://ru.wikipedia.org/wiki/Tee
Tenebras
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

хоть что-то выдало…
Romissevd
Стесняюсь спросить, а Вы установили библиотеку metar.
И второе, в Вашем коде, еще до того как вы начали использовать бибилиотеку metar, есть переменная с именем metar, которой вы присваиваете строку. Это может вызвать конфликт имен или их переопределения.
     # Записываем текст HTML-файла в переменную "metar"
    metar = sock.read()
Tenebras
Romissevd
Стесняюсь спросить, а Вы установили библиотеку metar.

Спрашивайте -не стесняйтесь!
Установил - не сомневайтесь!

Romissevd
в Вашем коде

Код не мой! Я просто разместил объяву!
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB