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]¶