6 gennaio 2010

Dati Temporali e Calendari con Python

Quando sentite parlare di Python che è già compreso di Batterie, non e certamente un modo di dire, al suo interno, il linguaggio dispone di una quantità notevole di librerie già pronte all'uso. Queste librerie, permettono al programmatore, di risolvere un' infinità di problemi senza cercare altrove la libreria giusta per affrontare e portare a termine il suo lavoro, ma trova (più o meno) tutto quello di cui ha bisogno nel nucleo del linguaggio stesso. Ecco il significato di Python e già compreso di Batterie.

Vediamone alcuni esempi.

importo i moduli calendar e time

assegno la prima variabile data per mandare in output la data odierna tramite la funzione ctime che formatta l'ora in un modo preordinato

assegno la seconda variabile my_cal per l'output del calendario del mese Aprile 2010

>>> import time
>>> import calendar
>>> data = time.ctime(time.time())
>>> my_cal = calendar.month(2010, 4)
>>> print '%s' % (data)
Wed Jan 06 14:46:50 2010
>>> print my_cal
April 2010
Mo Tu We Th Fr Sa Su
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30

se vogliamo stampare il timestamp (default) allo stesso modo della funzione ctime dovremo passare come parametri alla funzione le stringhe di formattazione temporali in questo modo '%a %b %d %I: %M: %S %Y,' alla funzione strftime

>>> time.strftime('%a %b %d %I: %M: %S %Y,')
'Wed Jan 06 08: 07: 51 2010,'

ecco il significato dei simboli di formattazione inseriti nella funzione.

%a nome del giorno
%b nome del mese
%d data giorno del mese
%I orologio formato dodici ore
%M minuti
%S secondi
%Y anno

per un elenco esaustivo dei codici di formattazione temporali, andate al modulo time della libreria python

vediamo all'opera il modulo datetime con la data. Il modulo datetime e stato inserito con la versione 2.3 di python.

>>> import datetime
>>> print 'oggi corre la data\n', datetime.date.today()
oggi corre la data
2010-01-06
>>> nuova_data = datetime.datetime.now()
>>> nuova_data.date()
datetime.date(2010, 1, 6)
>>> nuova_data.time()
datetime.time(21, 14, 17, 750000)


e con le ore e minuti.

>>> nuova_data.hour, nuova_data.minute, nuova_data.second
(21, 14, 17)

ritornando al modulo calendar, e quindi alla funzione stampata nell'esempio sopra non abbiamo fatto altro che assegnare alla variabile my_cal la funzione calendar.month(2010, 4)che non fa altro che stampare la sequenza anno mese. Se prendiamo la funzione month, che può restituire una stringa composta da più righe nel modo seguente month(numero_anno, numero_mese, larghezza, righe_settimana).

ecco in regalo con la funzione prcal, la stampa di tutto l'anno 2010

>>> my_cal = calendar.prcal(2010)
>>> my_cal
2010

January February March
Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su
1 2 3 1 2 3 4 5 6 7 1 2 3 4 5 6 7
4 5 6 7 8 9 10 8 9 10 11 12 13 14 8 9 10 11 12 13 14
11 12 13 14 15 16 17 15 16 17 18 19 20 21 15 16 17 18 19 20 21
18 19 20 21 22 23 24 22 23 24 25 26 27 28 22 23 24 25 26 27 28
25 26 27 28 29 30 31 29 30 31

April May June
Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su
1 2 3 4 1 2 1 2 3 4 5 6
5 6 7 8 9 10 11 3 4 5 6 7 8 9 7 8 9 10 11 12 13
12 13 14 15 16 17 18 10 11 12 13 14 15 16 14 15 16 17 18 19 20
19 20 21 22 23 24 25 17 18 19 20 21 22 23 21 22 23 24 25 26 27
26 27 28 29 30 24 25 26 27 28 29 30 28 29 30
31

July August September
Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su
1 2 3 4 1 1 2 3 4 5
5 6 7 8 9 10 11 2 3 4 5 6 7 8 6 7 8 9 10 11 12
12 13 14 15 16 17 18 9 10 11 12 13 14 15 13 14 15 16 17 18 19
19 20 21 22 23 24 25 16 17 18 19 20 21 22 20 21 22 23 24 25 26
26 27 28 29 30 31 23 24 25 26 27 28 29 27 28 29 30
30 31

October November December
Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su
1 2 3 1 2 3 4 5 6 7 1 2 3 4 5
4 5 6 7 8 9 10 8 9 10 11 12 13 14 6 7 8 9 10 11 12
11 12 13 14 15 16 17 15 16 17 18 19 20 21 13 14 15 16 17 18 19
18 19 20 21 22 23 24 22 23 24 25 26 27 28 20 21 22 23 24 25 26
25 26 27 28 29 30 31 29 30 27 28 29 30 31

con il modulo calendar si può fare molto ma molto di più. Ad esempio si possono calcolare se alcuni anni sono di tipo bisestile, semplicemente usando la funzione isleap nel seguente modo isleap(numero_anno_da_sottoporre) rispondendo TRUE se è bisestile altrimenti FALSE.

Come al solito per approfondire, la doc della libreria python ti è amica.

Nessun commento: