Сперва, думаю, надо написать так как осиливаю. После буду уже на фоне сделанного писать с использование функций. Буду пытаться…
Мне по-сути от программы нужно лишь два расшифрованных параметра. Точнее - один. Требуется вывод времени и вывод количества облаков. Причём в виде цифр. Всё это должно будет в будущем обрабатываться. Но это уже другая история.
Но я тут столкнулся с некой проблемой. В некоторых телеграммах встречается по несколько значений облаков. На разных высотах.
Пример тому:
PADK 190036Z AUTO 34008KT 9SM
FEW027 BKN035 OVC050 06/M01 A2996 RMK AO1
BKN, FEW и OVC - всё это облака.
Мне, существенно, нужно что бы было указано самое большое значение.
if "SKC" in par:
print ' 0.00'
break
elif "NSC" in par:
print ' 0.00'
break
elif "FEW" in par:
print ' 0.15'
break
elif 'SCT' in par:
print ' 0.40'
break
elif 'BKN' in par:
print ' 0.75'
break
elif 'OVC' in par:
print ' 1.00'
break
Вот тут я уже совсем не знаю - как это реализовать.
И я попробовал совместить сво] творение с тем, что было предложено. Работало до определённого момента. На последней части кода работать перестало.А именно на части, в которой я и пытался настроить вывод облаков.
Он по просту вообще ни чего не выводит на терминал…. но что-то происходит (“у ней неонка внутри”) - хард хрюкает… процессор тоже (но молча)

#!/usr/bin/env python
# coding:utf8
import requests
from html2text import html2text
import csv
import sys
filename = "stations.txt"
# Open data file
fd = open(filename, "r")
# Read data
reader = csv.reader(fd, delimiter="\t")
# Print data
for row in reader:
# Индекс ICAO-станции
url0 ='http://aviationweather.gov/metar/data?ids='
page = requests.get(url0 + row[0]).text
lines = html2text(page)
lines = lines.split('\n')
summa = ' ' + row[0] + ' ' + row[1] + ' ' + row[2] + ' ' + row[3] + ' '
# Перебираем все строки
state = False
for line in lines:
if row[0] in line:
state = True
if state==True:
par = line.split()
for i in par:
i = par[1]
if i[-1] == 'Z':
timeUTC = int(i[2:4])
strtime = str(timeUTC)
st = strtime+':'+i[4:6]
break
cl = ['SKC', 'NSC', 'FEW', 'SCT', 'BKN', 'OVC',]
dec = [0.00, 0.15, 0.40, 0,75, 1.00]
if cl[0] or cl[1] in par:
print st + dec[0]
break
elif cl[2] in par:
print st + dec[1]
break
elif cl[3] in par:
print st + dec[2]
break
elif cl[4] in par:
print st + dec[3]
break
elif cl[5] in par:
print st + dec[4]
break
# Сбрасываем признак строки с данными
state = False
Ну а вот, если нужно скрипт со списком метеостанций (он необходим для работы вышенаписанного)
#!/usr/bin/python
# coding: utf8
import urllib
import sys
import string
# Получаем файл со списком станций c сервера weather.rap.ucar.edu
sock = urllib.urlopen("http://weather.rap.ucar.edu/surface/stations.txt")
list = sock.read()
sock.close()
# Разбиваем текст на отдельные строки
lines = list.split('\n')
file = open('stations.txt', 'w')
# Перебираем по очереди все строки
for line in lines:
# Если длина строки 83 символа, то вырезаем из строки нужные значения
if len(line) == 83 :
# Индекс станции ICAO (отбрасываем пробелы слева и справа)
icao = line[20:24].strip()
# Если у данной станции есть индекс ICAO, то считываем остальные параметры
if len(icao) == 4 :
# Широта (градус)
lat = float(line[39:41]) + float(line[42:44])/100
# Долгота (градус)
lon = float(line[47:50]) + float(line[51:53])/100
# Высота над уровнем моря (м)
elev = float(line[55:59])
# Если после широты стоит символ S, то делаем значение широты отрицательным
if line[44:45] == 'S' :
lat = -lat
# Если после долготы стоит символ W, то делаем значение долготы отрицательным
if line[53:54] == 'W' :
lon = -lon
# Записываем только станции, находящиеся от 0 до 60 в.д. и от 30 до 90 с.ш.
# if (0 < lon < 60 and 30 < lat < 90) :
file.writelines("%s\t%.2f\t%.2f\t%.0f" % (icao, lat, lon, elev) + '\n')
file.close()
lines