Romissevd
а если так
Какая-то фигня выходит(((
Я после вышеуказанной строчки подписал print(lines), дабы посмотреть - что не так.
Вот такое пошло на вывод
["<class 'list'>"]
["<class 'list'>"]
["<class 'list'>"]
["<class 'list'>"]
["<class 'list'>"]
["<class 'list'>"]
["<class 'list'>"]
["<class 'list'>"]
["<class 'list'>"]
Прервал выполнение…
Сама программа
#!/usr/bin/python3
# coding: utf8
from numpy import *
import csv
import sys
import urllib.request, urllib.parse, urllib.error # Подключаем библиотеки для работы с Интернет,
import sys # для доступа к параметрам командной строки,
import string # для работы со строками
from datetime import datetime # Подключаем модуль для работы с датой и временем
# Получаем текущую дату со временем
t = datetime.strftime(datetime.utcnow(), "%Y-%m-%d_%H.%M")
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-станции
station = row[0]
# Создаем сокет-соединение с сервером
sock = urllib.request.urlopen("http://aviationweather.gov/metar/data?ids="+station+"&format=raw&hours=0&taf=off&layout=on&date=0")
# Записываем текст HTML-файла в переменную "metar"
metar = sock.read()
# Закрываем сокет-соединение с сервером
sock.close()
# Выводим текст HTML-файла на консоль
#print metar
# Разбиваем текст на отдельные строки
lines = str(list).split('\n')
print(lines)
# Задаем начальное значение переменной с признаком наличия строки данных
state = False
# Перебираем все строки
for line in lines:
if line == "No METAR":
break
# Ищем строку, предшествующую строке с данными METAR-телеграммы
if line == "<!-- Data starts here -->":
state = True
continue
# Декодируем телеграммуj
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
# Получаем значение об облаках
for i in par:
summa = ' ' + row[0] + ' ' + row[1] + ' ' + row[2] + ' ' + row[3] + ' '
if "SKC" in par:
print(st + summa + ' 0.00' + '\n', end=' ')
break
if "NSC" in par:
print(st + summa + ' 0.00' + '\n', end=' ')
break
if "FEW" in par:
print(st + summa + ' 0.00' + '\n', end=' ')
break
if 'SCT' in par:
print(st + summa + ' 0.00' + '\n', end=' ')
break
if 'BKN' in par:
print(st + summa + ' 0.00' + '\n', end=' ')
break
if 'OVC' in par:
print(st + summa + ' 0.00' + '\n', end=' ')
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