Найти - Пользователи
Полная версия: Несколько вопросов по программе
Начало » Центр помощи » Несколько вопросов по программе
1 2 3 4 5 6
Tenebras
Странно… оО

Пробую совместить то, что было предложено с тем, что я натыкал до этого. Вот не пашет. Объясните - что не так?

 #!/usr/bin/env python
# coding:utf8
import requests
from html2text import html2text
    
url0 ='http://aviationweather.gov/metar/data?ids='
ikao = 'ULLI'
page = requests.get(url0 + ikao).text
lines =  html2text(page).split('\n')
state = False
# Перебираем все строки
for line in lines:
	if line == ikao:
		state = True
		print 'Hello!'

Терминал ни чего не выдаёт.
vic57
#if line == ikao:
if ikao in line :
ты походу переутомился
vic57
 #!/usr/bin/env python
# coding:utf8
import requests
from html2text import html2text
    
url0 ='http://aviationweather.gov/metar/data?ids='
ikao = 'ULLI'
page = requests.get(url0 + ikao).text
lines =  html2text(page)
lines = lines.split('\n')
state = False
# Перебираем все строки
for line in lines:
    if ikao in line:
        state = True
        print line
        break
у меня так
vic57
 #!/usr/bin/env python
# coding:utf8
import requests
from html2text import html2text
    
def get_metar(url,ikao):
    page = requests.get(url + ikao).text
    lines =  html2text(page).split('\n')
    # Перебираем все строки
    for line in lines:
        if ikao in line:
            return line
    return ''
#возвращает строку данных, если ее нет - пустую строку
if __name__=="__main__":
    url0 ='http://aviationweather.gov/metar/data?ids='
    ikao = 'ULLI'
    metar_str = get_metar(url0,ikao)
    print metar_str
применяй функции - меньше расход памяти и читать легче
в моей юности если функция больше 24 строк была - препод выгонял сразу, не читая

Tenebras
vic57
применяй функции - меньше расход памяти и читать легче
в моей юности если функция больше 24 строк была - препод выгонял сразу, не читая

Вот из двух прошлых ответов мне больше понятен первый. Функции я, пока осиливаю. Но, бесспорно, они изящны. По крайней мере, с моей точки зрения…. может Боги Программирования и не довольны… но по мне - оно красиво. И уж точно лучше моих Чудовищ!
vic57
один из основных принципов кибернетики - черный ящик. я не знаю, что внутри, я знаю что на определенное воздействие будет определенный отклик. функция и есть такой ящик.
в данном случае - на входе - url и ikao, на выходе - строка metar-данных.
vic57
а по памяти:
1. запрос к сайту - возвращается page - висит в памяти
2. html2text - возвращает lines - висит в памяти
3. поиск и возврат metar-строки - возврат metar-строки, page и lines уничтожаются при возврате из фунции (все локальные переменные очищаются при выходе)
а 24 строки - в экран не влезало
Tenebras
Сперва, думаю, надо написать так как осиливаю. После буду уже на фоне сделанного писать с использование функций. Буду пытаться…

Мне по-сути от программы нужно лишь два расшифрованных параметра. Точнее - один. Требуется вывод времени и вывод количества облаков. Причём в виде цифр. Всё это должно будет в будущем обрабатываться. Но это уже другая история.

Но я тут столкнулся с некой проблемой. В некоторых телеграммах встречается по несколько значений облаков. На разных высотах.

Пример тому:
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
vic57
потому у тебя и не идет, что все в одну кучу свалено. станций в списке несколько тысяч, а ты все
подряд хочешь вывести.  csv я бы сразу выкинул, файл текстовый и парсится легко
1.получи из файла список станций, которые тебе нужны
2.получи для станции данные metar
3.распарси данные metar.
это отдельные задачи, для каждой свою функцию делай.
Tenebras
vic57
1.получи из файла список станций, которые тебе нужны
Как не печально - нужны все станции. И то, даже это, не даст полной картины…
Хотя, может, разделю их на сегменты…
Спасибо за советы. Завтречка попробую осилить. Однако так и не понял причины не работоспособности последней…
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