pywws.Template

Creare file di dati di testo basato su un modello

usage: python -m pywws.Template [options] data_dir template_file output_file
options are:
 --help    display this help
data_dir is the root directory of the weather data
template_file is the template text source file
output_file is the name of the text file to be created

Introduzione

Questo è probabilmente il modulo più difficile da utilizzare dell’insieme di software della stazione meteo. Genera file di testo basati su un file “template” dai dati raw, hourly, daily & monthly della stazione meteo. L’elaborazione del modello va al di là della semplice sostituzione di valori da includere in cicli, salti in avanti o indietro dei dati, l’elaborazione dei dati e la sostituzione di valori mancanti.

Un file di modello può essere qualsiasi tipo di file di testo (testo normale, xml, html, ecc.) in cui sono stati aggiunti “processing instructions”. Queste istruzioni di elaborazione sono delimitate da caratteri di hash (‘#’). Essi non vengono copiati all’uscita, ma accade qualcos’altro: o viene inserito un valore di dati o viene effettuato un numero limitato di altre azioni.

Prima di scrivere il proprio file di template, potrebbe essere utile esaminare alcuni esempi nella directory example_templates.

Istruzioni di elaborazione

Note that if the closing ‘#’ of a processing instruction is the last character on a line then the following line break is not outputted. This makes templates easier to edit as you can have a separate line for each processing instruction and still produce output with no line breaks. If you want to output a line break after a processing instruction, put a blank line immediately after it.

##

output di un singolo carattere ‘#’.

#! testo di commento#

Il commento, non genera nessun output. testo di commento può essere qualsiasi testo senza un’interruzione di riga.

#monthly#

ritorna i dati “monthly” di riepilogo. L’indice viene reimpostato sul valore più recente.

#daily#

ritorna i dati “daily” di riepilogo. L’indice viene reimpostato sul valore più recente.

#hourly#

ritorna i dati “hourly” di riepilogo. L’indice viene reimpostato sul valore più recente.

#raw#

ritorna i dati “raw” di riepilogo. L’indice viene reimpostato sul valore più recente.

Cambiato nella versione 11.09: This now selects “calibrated” data. The directive name remains unchanged for backwards compatibility.

#timezone name#

Converte tutti i valori data e ora del fuso orario name prima dell’output. I valori consentiti per nome sono utc o local.

#locale expr#

switch use of ‘locale’ on or off, according to expr. When locale is on floating point numbers may use a comma as the decimal separator instead of a point, depending on your localisation settings. Use "True" or "False" for expr.

#roundtime expr#

Interruttore arrotondamento tempo on/off, secondo expr. Quando l’arrotondamento del tempo è attivo, 30 secondi vengono aggiunti a ciascun valore di tempo. Questo è utile se si stampa solo in ore e minuti, ad esempio con un formato ” %H: %M”, e che i valori di tempo come ad esempio 10:23:58 di apparire come “10:24 ”. Usare "True" o "False" per expr.

#jump count#

Salta i valori count. L’indice dei dati è regolata da count ore o giorni. Con valori negativi salta indietro nel tempo.

È una buona idea inserire salti all’interno di un loop alla fine, poco prima dell’istruzione #endloop#. Il ciclo può poi terminare in modo pulito se ha esaurito i dati.

#goto date-time#

va alla date-time‘. L’indice di dati è impostato al record immediatamente dopo date-time.Questo può essere in UTC o il fuso orario locale, secondo l’impostazione di timezone, E deve corrispondere esattamente al formato data ISO, per esempio "2010-11-01 12:00:00" è mezzogiorno a partire dal 1° novembre 2010.

Parti di date-time possono essere sostituite con strftime % stile caratteri di formattazione per specificare l’attuale indice del ciclo. Ad esempio, "%Y-%m-01 12:00:00" è mezzogiorno a partire dal giorno 1 del mese.

#loop count#

avvia un ciclo che si ripete count volte. count deve essere uno o più.

#endloop#

finisce un ciclo avviato da #loop count#. L’elaborazione del modello torna alla riga contenente le istruzioni #loop count#. Non provare a nido loop.

#key fmt_string no_value_string conversion#

ricava un valore di dati. key` è la chiave dei dati, es. temp_out` per la temperatura esterna. fmt_string è un printf come stringa di formattazione (in realtà l’operatore % di Python’s) tranne che per i valori data e ora, quando si ha data e ora usare il metodo strftime(). no_value_string risulta al posto di fmt_string quando il valore dei dati è assente, ad esempio, se la stazione ha perso il contatto con il sensore esterno. conversion è un espressione Python per convertire i dati, ad esempio per convertire la velocità da m/s a mph è possibile utilizzare "x * 3.6 / 1.609344", o la funzione più conveniente prevista "wind_mph(x)".

Tutti questi valori tra virgolette ” contengono spazi e altri caratteri potenzialmente difficili. Tutti tranne key sono facoltativi, ma si noti che se si desidera specificare una conversione, inoltre, è necessario specificare fmt_string e no_value_string .

#calc expression fmt_string no_value_string conversion#

restituisce un valore calcolato da uno o più elementi di dati. expression è una espressione valida in Python, ad es. "dew_point(data['temp_out'], data['hum_out'])" per calcolare il punto di rugiada all’aperto. fmt_string, no_value_string e conversion sono come descritti sopra. Si noti che, probabilmente, è più efficiente incorporare qualsiasi conversione nell’espressione stessa.

Esempio

Ecco un esempio di base e utilizzo avanzato del modello. E’ parte della 6hrs.txt del file di esempio del modello, che genera una tabella HTML di 7 letture orarie (che deve coprire 6 ore).

#hourly#
#jump -6#
#loop 7#
  <tr>
    <td>#idx "%Y/%m/%d" "" "[None, x][x.hour == 0 or loop_count == 7]"#</td>
    <td>#idx "%H%M %Z"#</td>
    <td>#temp_out "%.1f °C"#</td>
    <td>#hum_out "%d%%"#</td>
    <td>#wind_dir "%s" "-" "winddir_text(x)"#</td>
    <td>#wind_ave "%.0f mph" "" "wind_mph(x)"#</td>
    <td>#wind_gust "%.0f mph" "" "wind_mph(x)"#</td>
    <td>#rain "%0.1f mm"#</td>
    <td>#rel_pressure "%.0f hPa"#, #pressure_trend "%s" "" "pressure_trend_text(x)"#</td>
  </tr>
#jump 1#
#endloop#

Le prime tre righe di questo frammento: seleziona i dati orari, salta indietro di 6 ore, avvia un loop con un conteggio di 7. un salto in avanti di un’ora appare poco prima della fine del segmento ripetuto. A quest’ultimo salto (di un’ora) accade ogni volta nel ciclo, una sequenza di 7 letture dei dati sarà il risultato. L’ultima riga indica la fine del ciclo - tutto tra le linee #loop 7# e #endloop# è ripetuta 7 volte.

Le istruzioni #temp_out ...#, #hum_out ...#, #rain ...# e #rel_pressure ...# mostrano dati di base. Ognuno di essi con un fmt_string per formattare i dati in modo appropriato. Le istruzioni #wind_ave ...# e #wind_gust ...# mostra come utilizzare un’espressione di conversione per convertire m/s a mph.

Le istruzioni #wind_dir ...# e #pressure_trend ...# mostrano l’uso della funzione incorporata wind_dir_text e la funzione pressure_trend_text convertono i valori numerici in testo.

Finalmente arriviamo ai valori di datetime. L’istruzione #idx "%H%M"# emette semplicemente l’ora (in formato HHMM) dell’indice dei dati meteo. L’istruzione``#idx “%Y/%m/%d” “” “[None, x][x.hour == 0 or loop_count == 7]”#`` è un po’ più complicato. Esso emette la data, ma solo sulla prima riga o se la data è cambiata. Ciò è reso possibile dall’indicizzazione dell’array [None, x] con un’espressione booleana che è vera quando loop_count è 7 (Cioè il primo passo del ciclo) o x.hour è pari a zero (Vale a dire che questa è la prima ora del giorno).

Dettagli API

Funzioni

ApplicationLogger(verbose[, logfile])
Zambretti(params, hourly_data)
ZambrettiCode(params, hourly_data)
apparent_temp(temp, rh, wind)

Calcola la temperatura apparente (sensazione reale), con formula da

cadhumidex(temp, humidity)

Calcolo Indice di umidità come per gli standard Canadian Weather Standards

dew_point(temp, hum)

Calcola il punto di rugiada, usando la formula da http://en.wikipedia.org/wiki/Dew_point.

illuminance_wm2(lux)

Conversione approssimativa di illuminazione in lux a radiazione solare in W/m2

main([argv])
pressure_inhg(hPa)

Converte la pressione da ettopascal/millibar in pollici di mercurio

pressure_trend_text(trend)

Converte in una stringa, la tendenza barometrica sono usati per la UK met office.

rain_inch(mm)

Converte le precipitazioni da millimetri a pollici

temp_f(c)

Converte la temperatura da gradi Celsius a Fahrenheit

usaheatindex(temp, humidity, dew)

Calcolare l’indice di calore secondo Standards USA National Weather Service

wind_bft(ms)

Converte i metri al secondo del vento in scala Beaufort

wind_chill(temp, wind)

Calcola il vento gelido, usando la formula di

wind_kmph(ms)

Converte il vento da metri al secondo a chilometri orari

wind_kn(ms)

Converte il vento da metri al secondo a nodi

wind_mph(ms)

Converte il vento da metri al secondo a miglia all’ora

winddir_degrees(pts)

Convertire la direzione del vento a 0..15 in gradi

winddir_text(pts)

Convertire direzione del vento da 0 .. 15 per i punti della bussola

Classi

Template(params, status, calib_data, ...[, ...])
datetime(year, month, day[, hour[, minute[, ...) The year, month and day arguments are required.
timedelta

Differenza tra due valori datetime.

class pywws.Template.Template(params, status, calib_data, hourly_data, daily_data, monthly_data, use_locale=True)[sorgente]
process(live_data, template_file)[sorgente]
make_text(template_file, live_data=None)[sorgente]
make_file(template_file, output_file, live_data=None)[sorgente]
pywws.Template.main(argv=None)[sorgente]