Le module de calendrier Python : créer des calendriers avec Python
Le module Python calendar
propose plusieurs façons de générer des calendriers pour les programmes Python. Il comprend également une variété de fonctions permettant de travailler avec des données de calendrier sous forme de chaînes, de nombres et d'objets datetime.
Dans ce didacticiel, vous apprendrez à utiliser le module calendar
pour créer et personnaliser des calendriers avec Python.
À la fin de ce didacticiel, vous serez en mesure de :
- Affichez les calendriers dans votre terminal avec Python
- Créez des calendriers en texte brut et HTML
- Formater les calendriers en fonction de paramètres régionaux et de conventions d'affichage spécifiques.
- Utilisez les fonctions et méthodes liées au calendrier pour accéder aux données de calendrier de niveau inférieur dans divers formats.
Affichage des calendriers dans votre terminal
Les systèmes d'exploitation Unix et de type Unix tels que macOS et Linux incluent un utilitaire de ligne de commande cal
pour afficher les calendriers dans une console interactive :
$ cal
May 2024
Su Mo Tu We Th Fr Sa
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
Python fournit un outil similaire, qui vous permet d'exécuter le module calendar
en tant que script de ligne de commande. Pour commencer à explorer le module Python calendar
, ouvrez votre programme de terminal et entrez la commande suivante :
$ python -m calendar
2024
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 6 7 1 2 3 4 1 2 3
8 9 10 11 12 13 14 5 6 7 8 9 10 11 4 5 6 7 8 9 10
15 16 17 18 19 20 21 12 13 14 15 16 17 18 11 12 13 14 15 16 17
22 23 24 25 26 27 28 19 20 21 22 23 24 25 18 19 20 21 22 23 24
29 30 31 26 27 28 29 25 26 27 28 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 5 6 7 1 2 3 4 5 1 2
8 9 10 11 12 13 14 6 7 8 9 10 11 12 3 4 5 6 7 8 9
15 16 17 18 19 20 21 13 14 15 16 17 18 19 10 11 12 13 14 15 16
22 23 24 25 26 27 28 20 21 22 23 24 25 26 17 18 19 20 21 22 23
29 30 27 28 29 30 31 24 25 26 27 28 29 30
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 5 6 7 1 2 3 4 1
8 9 10 11 12 13 14 5 6 7 8 9 10 11 2 3 4 5 6 7 8
15 16 17 18 19 20 21 12 13 14 15 16 17 18 9 10 11 12 13 14 15
22 23 24 25 26 27 28 19 20 21 22 23 24 25 16 17 18 19 20 21 22
29 30 31 26 27 28 29 30 31 23 24 25 26 27 28 29
30
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 4 5 6 1 2 3 1
7 8 9 10 11 12 13 4 5 6 7 8 9 10 2 3 4 5 6 7 8
14 15 16 17 18 19 20 11 12 13 14 15 16 17 9 10 11 12 13 14 15
21 22 23 24 25 26 27 18 19 20 21 22 23 24 16 17 18 19 20 21 22
28 29 30 31 25 26 27 28 29 30 23 24 25 26 27 28 29
30 31
L'exécution de python -m calendrier
sans argument génère un calendrier d'une année complète pour l'année en cours. Pour afficher le calendrier complet d'une année différente, transmettez la représentation entière d'une année comme premier argument de la commande calendar
:
$ python -m calendar 1989
Pour afficher un seul mois, indiquez une année et un mois comme deuxième paramètre :
$ python -m calendar 2054 07
July 2054
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
Comme vous pouvez le voir dans ces exemples, le module calendar
peut afficher des calendriers pour les dates passées et futures. Selon la documentation officielle, le module calendar
utilise le calendrier grégorien actuel, étendu indéfiniment dans les deux sens. Il utilise également la norme ISO 8601, qui est une norme internationale pour l'échange et la communication de données relatives à la date et à l'heure.
Maintenant que vous savez comment afficher des calendriers dans votre terminal avec Python, vous pouvez passer à autre chose et explorer d'autres approches pour créer des calendriers sous forme de texte brut ou de représentations de balisage HTML.
Création de calendriers textuels
Pour générer des calendriers en texte brut, le module calendar
fournit calendar.TextCalendar
avec des méthodes pour formater et imprimer des calendriers mensuels et annuels.
TextCalendar.formatyear()
accepte un seul paramètre pour l'année, comme le script de ligne de commande calendar
. Essayez-le dans votre Python REPL en exécutant le code suivant :
>>> import calendar
>>> text_calendar = calendar.TextCalendar()
>>> text_calendar.formatyear(2024)
' 2024\n\n January (...)'
Ici, après avoir instancié une instance text_calendar
de calendar.TextCalendar
, vous appelez .formatyear(2024)
, qui renvoie le calendrier complet pour 2024 sous forme de chaîne multiligne. Vous pouvez rendre cela plus joli avec TextCalendar.pryear()
, qui imprime le calendrier de l'année dans un format plus lisible :
>>> text_calendar.pryear(2024)
2024
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 6 7 1 2 3 4 1 2 3
8 9 10 11 12 13 14 5 6 7 8 9 10 11 4 5 6 7 8 9 10
15 16 17 18 19 20 21 12 13 14 15 16 17 18 11 12 13 14 15 16 17
22 23 24 25 26 27 28 19 20 21 22 23 24 25 18 19 20 21 22 23 24
29 30 31 26 27 28 29 25 26 27 28 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 5 6 7 1 2 3 4 5 1 2
8 9 10 11 12 13 14 6 7 8 9 10 11 12 3 4 5 6 7 8 9
15 16 17 18 19 20 21 13 14 15 16 17 18 19 10 11 12 13 14 15 16
22 23 24 25 26 27 28 20 21 22 23 24 25 26 17 18 19 20 21 22 23
29 30 27 28 29 30 31 24 25 26 27 28 29 30
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 5 6 7 1 2 3 4 1
8 9 10 11 12 13 14 5 6 7 8 9 10 11 2 3 4 5 6 7 8
15 16 17 18 19 20 21 12 13 14 15 16 17 18 9 10 11 12 13 14 15
22 23 24 25 26 27 28 19 20 21 22 23 24 25 16 17 18 19 20 21 22
29 30 31 26 27 28 29 30 31 23 24 25 26 27 28 29
30
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 4 5 6 1 2 3 1
7 8 9 10 11 12 13 4 5 6 7 8 9 10 2 3 4 5 6 7 8
14 15 16 17 18 19 20 11 12 13 14 15 16 17 9 10 11 12 13 14 15
21 22 23 24 25 26 27 18 19 20 21 22 23 24 16 17 18 19 20 21 22
28 29 30 31 25 26 27 28 29 30 23 24 25 26 27 28 29
30 31
Comme vous pouvez le voir, .pryear()
nécessite l'année comme premier argument. Il fournit également quelques paramètres facultatifs pour formater les propriétés d'affichage du calendrier qui ressemblent à ceci : .pryear(theyear, w=2, l=1, c=6, m=3)
.
Le paramètre w
définit la largeur de la colonne de date, l
est le nombre de lignes par semaine, c
définit l'espacement entre les colonnes du mois et >m
est le nombre de colonnes du mois.
Pour formater et imprimer un calendrier pour un seul mois sous forme de texte brut, TextCalendar
fournit .formatmonth()
et .prmonth()
, qui sont similaires aux méthodes de calendrier annuel. La méthode .prmonth()
inclut un deuxième paramètre obligatoire pour le mois sous forme d'entier, ainsi que deux paramètres facultatifs : w
pour la largeur des colonnes de date, et l
pour le nombre de lignes que chaque semaine utilisera. Par défaut, ces deux paramètres facultatifs sont nuls.
En travaillant dans la même session de console qu'avant, utilisez TextCalendar.prmonth()
pour générer et imprimer un calendrier en texte brut pour un seul mois, comme ceci :
>>> text_calendar.prmonth(2024, 1)
January 2024
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
Maintenant que vous comprenez les bases de la création de calendriers en texte brut, vous pouvez aller plus loin et apprendre à générer des calendriers HTML avec Python à afficher sur le Web.
Génération et style de calendriers HTML
Si vous devez créer un calendrier pour un site Web, le module calendar
peut également générer des calendriers en HTML avec calendar.HTMLCalendar
. Ses méthodes .formatmonth()
et .formatyear()
fonctionnent comme leurs méthodes TextCalendar
correspondantes. Mais ils remplacent les paramètres de formatage par la possibilité de générer des classes CSS pour styliser le HTML.
Pour utiliser cette classe, créez une instance html_calendar
dans votre console Python et testez-la en appelant .formatyear()
:
>>> import calendar
>>> html_calendar = calendar.HTMLCalendar()
>>> html_calendar.formatyear(2024)
'<table border="0" cellpadding="0" cellspacing="0" class="year">\n<tr> (...)'
Cela renverra une longue chaîne Python de balisage HTML représentant un calendrier pour l'année complète sous forme de tableau HTML. Pour afficher ce calendrier HTML dans un navigateur Web, utilisez d'abord la fonction print()
de Python pour afficher la chaîne au format HTML dans votre console :
>>> print(html_calendar.formatyear(2024))
Copiez maintenant le résultat de cette commande et collez-le dans un nouveau fichier appelé formatyear.html
. Ouvrez ce fichier avec le navigateur Web de votre ordinateur et il devrait ressembler à ceci :
Comme vous pouvez le constater, les tableaux HTML sans style ne constituent pas exactement le moyen le plus convivial d'afficher et de lire un calendrier. Heureusement, HTMLCalendar.formatyearpage()
vous permet d'inclure une feuille de style CSS en générant le calendrier d'une année sous forme de page HTML complète. Le paramètre css
facultatif de cette méthode a par défaut la valeur 'calendar.css'
, faisant référence au nom du fichier CSS qui inclura les styles personnalisés.
Pour créer un nouveau fichier contenant une page HTML complète générée par .formatyearpage()
, utilisez la fonction open()
intégrée de Python. Passez ensuite 'wb'
comme deuxième argument après le nom du fichier pour écrire dans le fichier en mode binaire :
>>> with open("formatyearpage.html", mode="wb") as file:
... file.write(html_calendar.formatyearpage(2024))
...
Ici, vous utilisez l'instruction Python with
pour ouvrir votre fichier, en créant un objet gestionnaire de contexte pour garantir que le fichier sera toujours fermé même si une exception est levée dans le bloc with
. Il est important de toujours fermer les fichiers ouverts par Python pour préserver les ressources du système d'exploitation et protéger les fichiers contre la perte de données.
Vous devriez maintenant voir un nouveau fichier appelé formatyearpage.html
dans le dossier où vous avez ouvert votre console Python. Ouvrez ce fichier et vous verrez le balisage d'une page HTML complète comprenant cette balise <link>
:
<link rel="stylesheet" type="text/css" href="calendar.css" />
Créez un nouveau fichier appelé calendar.css
dans le même répertoire que le fichier formatyearpage.html
et ajoutez le code CSS suivant :
body {
font: 16px "Helvetica Neue", Arial, Helvetica, Geneva, sans-serif;
}
table {
margin: 10px;
}
th, td {
padding: 5px;
}
Vous pouvez maintenant ouvrir formatyearpage.html
avec votre navigateur Web pour voir comment vous avez rendu votre calendrier un peu plus lisible. Vous avez ajouté du remplissage autour des lignes et des colonnes de date, augmenté les marges des tableaux de mois et mis à jour la propriété de police du corps HTML :
En plus des méthodes que vous avez apprises pour créer des calendriers en texte brut et HTML, le module calendar
vous permet également de créer des calendriers pour différents emplacements mondiaux, que vous explorerez ensuite.
Formatage des calendriers pour des emplacements spécifiques
Par défaut, tous les calendriers générés par le module calendar
suivent la convention européenne d'utiliser le lundi comme premier jour de la semaine. Vous pouvez changer cela avec Calendar.setfirstweekday()
, qui est disponible comme méthode d'instance pour TextCalendar
et HTMLCalendar
.
Le module calendar
utilise des entiers pour représenter les jours de la semaine, où zéro correspond au lundi et six au dimanche, ou il utilise des constantes telles que calendar.MONDAY
, qui est définie pour lisibilité.
Pour changer le premier jour de la semaine du lundi au dimanche pour un calendrier en texte brut, exécutez le code suivant dans votre console Python :
>>> import calendar
>>> text_calendar = calendar.TextCalendar()
>>> text_calendar.prmonth(2024, 1)
January 2024
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
>>> text_calendar.setfirstweekday(calendar.SUNDAY)
>>> text_calendar.prmonth(2024, 1)
January 2024
Su Mo Tu We Th Fr Sa
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
De plus, le module calendar
fournit des sous-classes spécifiques à l'emplacement de TextCalendar
et HTMLCalendar
qui affichent les noms de mois et de jours de la semaine pour une locale spécifique. Vous trouverez ci-dessous un exemple de ce à quoi cela ressemblerait si vous utilisiez calendar.LocaleTextCalendar
pour générer un calendrier pour les paramètres régionaux de l'Allemagne en utilisant l'encodage UTF-8 :
>>> locale_calendar = calendar.LocaleTextCalendar(locale="de_DE.UTF-8")
>>> locale_calendar.prmonth(2024, 1)
Januar 2024
Mo Di Mi Do Fr Sa So
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
Votre calendrier affiche désormais les abréviations du mois et du jour de la semaine en fonction de leur orthographe allemande.
Remarque : Les codes de paramètres régionaux varient selon le système d'exploitation, comme expliqué dans la documentation du module Python locale
.