📅 Stampare un Calendario in Python: 3 semplici modi

  


Python mette a disposizione un modulo integrato chiamato calendar per lavorare con i calendari in maniera semplice ed efficace. In questo articolo vedremo tre script diversi per generare calendari testuali direttamente da terminale o da un'app CLI.

🔗 Ti piace Techelopment? Dai un'occhiata al sito per tutti i dettagli!

🗓️ 1. Calendario di un Solo Mese

import calendar

year = 2025
month = 7

print(calendar.month(year, month))

Questo script stampa il calendario di un singolo mese. Modifica i valori di year e month per visualizzare qualsiasi mese desiderato.

🖨️ Output

     July 2025
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 31

📆 2. Calendario Completo di un Anno

import calendar

year = 2025

print(calendar.calendar(year))

Con questo semplice codice, puoi stampare tutto il calendario dell’anno indicato, mese per mese.

🖨️ Output (inizio dell'anno)

                                  2025

      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  4  5                      1  2                      1  2
 6  7  8  9 10 11 12       3  4  5  6  7  8  9       3  4  5  6  7  8  9
13 14 15 16 17 18 19      10 11 12 13 14 15 16      10 11 12 13 14 15 16
20 21 22 23 24 25 26      17 18 19 20 21 22 23      17 18 19 20 21 22 23
27 28 29 30 31            24 25 26 27 28            24 25 26 27 28 29 30
                                                    31

(segue con aprile–dicembre)


🌟 3. Calendario con Evidenziazione del Giorno Corrente

import calendar
from datetime import datetime

def print_calendar_with_highlight(year, month):
    today = datetime.today()
    current_day = today.day if today.year == year and today.month == month else -1

    cal = calendar.TextCalendar(calendar.MONDAY)
    cal_str = cal.formatmonth(year, month)

    HIGHLIGHT_START = "\033[96m"
    HIGHLIGHT_END = "\033[0m"

    lines = cal_str.splitlines()
    highlighted_lines = []
    for line in lines:
        if current_day != -1:
            day_str = str(current_day)
            if ' ' + day_str + ' ' in line:
                line = line.replace(' ' + day_str + ' ', HIGHLIGHT_START + '|' + day_str + '|' + HIGHLIGHT_END)
        highlighted_lines.append(line)

    print("\n".join(highlighted_lines))

# Uso
current_year = datetime.today().year
current_month = datetime.today().month

print_calendar_with_highlight(current_year, current_month)

🔍 Spiegazione Dettagliata

  • Importazioni: vengono importati i moduli calendar (per creare calendari) e datetime (per ottenere la data attuale).
  • Funzione print_calendar_with_highlight: riceve anno e mese come input e genera il calendario del mese, evidenziando il giorno corrente se coincide con l'anno e mese passati.
  • Individuazione del giorno corrente: si usa datetime.today() per ottenere la data odierna e confrontarla con il mese/anno richiesto. Se coincidono, si salva il numero del giorno.
  • Creazione del calendario: TextCalendar crea il calendario in formato testuale, partendo dal lunedì. Il calendario viene convertito in stringa riga per riga con splitlines().
  • Evidenziazione con ANSI: se il giorno corrente è presente in una riga, viene sostituito con una versione colorata usando codici ANSI (nel nostro caso, colore ciano). Si utilizza \033[96m per iniziare il colore e \033[0m per resettarlo.
  • Stampa finale: le righe modificate vengono stampate una dopo l’altra. Il giorno corrente apparirà evidenziato nel terminale.

🖨️ Output (esempio per il 3 luglio 2025)

July 2025 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 31

Nota: la colorazione effettiva avviene solo su terminali che supportano i codici ANSI (es. Linux/macOS, Windows PowerShell).


✅ Conclusione

Questi tre script mostrano quanto possa essere potente ma semplice usare Python per gestire calendari. A seconda delle esigenze – dal calendario mensile a quello annuale, fino a soluzioni interattive – il modulo calendar può coprire molte esigenze senza librerie esterne.



Follow me #techelopment

Official site: www.techelopment.it
facebook: Techelopment
instagram: @techelopment
X: techelopment
Bluesky: @techelopment
telegram: @techelopment_channel
whatsapp: Techelopment
youtube: @techelopment