### Navigazione

- indice
- moduli |
- successivo |
- precedente |
- pywws 13.12.dev1118 documentation »
- Programmi Python e moduli »

# 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
`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) | Convertire in una stringa carattere l’andamento della pressione, come utilizzata dal 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` | datetime(year, month, day[, hour[, minute[, second[, microsecond[,tzinfo]]]]])
`timedelta` | Differenza tra due valori datetime.

class `pywws.Template.``Template`(params, status, calib_data, hourly_data, daily_data, monthly_data, use_locale=True)
  `process`(live_data, template_file)
  `make_text`(template_file, live_data=None)
  `make_file`(template_file, output_file, live_data=None)

`pywws.Template.``main`(argv=None)

### Navigazione

- indice
- moduli |
- successivo |
- precedente |
- pywws 13.12.dev1118 documentation »
- Programmi Python e moduli »