Python >> Tutoriel Python >  >> Python

Comment travailler avec les modules Calendar et Arrow Python

Au cours de votre parcours en tant que développeur ou data scientist, vous devrez travailler avec des dates et des heures. Heureusement, Python dispose de plusieurs bibliothèques pratiques qui facilitent la tâche.

Dans cet article, nous allons passer rapidement en revue module datetime, puis examinez le calendrier et Modules Arrow en Python.

En tant que programmeur, développeur, analyste de données ou scientifique de données utilisant Python, vous devrez probablement traiter assez souvent des données de date et d'heure. Heureusement, le datetime de Python , calendar , et arrow des bibliothèques sont disponibles pour rationaliser vos tâches. Voyons comment ils fonctionnent, puis concentrons-nous sur l'utilisation du calendrier et des bibliothèques Arrow en particulier.

Comment utiliser DateHeure en Python

Nous avons déjà discuté du module datetime dans ce blog, je vais donc faire un bref examen avant de passer aux modules calendrier et flèche.

Le datetime le module offre des types comme la date, l'heure, datetime , et timedelta . Il vous permet également de récupérer des informations sur le fuseau horaire. Par exemple :

# import 
import datetime

# get current date and time
datetime_now = datetime.datetime.now()
print(datetime_now)

Sortie :

2021-07-28 15:10:08.773252

Nous pouvons également imprimer des dates sous forme de chaînes dans différents formats :

# Import 
from datetime import datetime

# Set a date as a string
date = "11/07/2021 10:25:32"

# Print date as dd/mm/yyyy format
date_obj1 = datetime.strptime(date, "%d/%m/%Y %H:%M:%S")
print("date and time =", date_obj1)

# Print date as mm/dd/yyyy format
date_obj2 = datetime.strptime(date, "%m/%d/%Y %H:%M:%S")
print("date and time =", date_obj2)

Sortie :

date and time = 11/07/2021 10:25:32
date and time = 11/07/2021 10:25:32

Le strftime() La méthode vous permet de formater l'heure en tant que chaîne lisible. Dans l'exemple suivant, nous publions le mois dans un format lisible :

# Import 
import datetime

# Set a date
date = datetime.datetime(2018, 6, 1)
	
# Print month in a readable format
print(date.strftime("%B"))

Résultat :

June

Il y a une feuille de triche pratique sur strftime() ici. Sentez-vous libre de l'utiliser. Plus tard, nous verrons un moyen plus efficace de récupérer ces informations avec le arrow module.

Le timedelta() permet d'effectuer des opérations de comparaison et de mesurer la durée :

# Import 
from datetime import datetime, timedelta
  
# Using current time
current_time = datetime.now()
  
# Print current time
print ("Current time: ", str(current_time))
  
# Calculate future date in three years time
date_aft_3yrs = current_time + timedelta(days = 1095)

# Calculate future date in five days
date_aft_5days = current_time + timedelta(days = 5)
  
# Print calculated future_dates
print('In three years from now, the date will be:', str(date_aft_3yrs))
print('In five days from now, the date will be:', str(date_aft_5days))

Nous sommes passés par naïf datetime objets dans l'exemple précédent, c'est-à-dire qu'il n'y a pas d'informations de fuseau horaire. Cependant, il est recommandé de travailler avec des objets sensibles au temps. Nous pouvons définir le fuseau horaire en utilisant le pytz module, comme datetime seul ne suffit pas ici. Si vous n'avez pas installé pytz pourtant, vous pouvez le faire avec pip :

pip install pytz 

Voici un exemple de travail :

import datetime
import pytz

utc_now = pytz.utc.localize(datetime.datetime.utcnow())
eur_now = utc_now.astimezone(pytz.timezone("Europe/Paris"))

eur_now == utc_now

Nous avons maintenant deux objets horaires avec des fuseaux horaires différents, mais ils sont égaux. Nous pouvons les imprimer comme suit :

utc_now.isoformat()

La sortie du temps universel coordonné est :

'2021-07-28T07:39:51.567436+00:00'

Et là, revenons à l'heure européenne à Paris :

eur_now.isoformat()

La sortie de l'heure européenne à Paris est :

'2021-07-28T09:39:51.567436+02:00'

Pour plus d'informations sur le datetime module, vous pouvez consulter la documentation Python datetime.

Comment utiliser le calendrier en Python

Python a un module intégré attrayant appelé calendar qui vous permet d'afficher et de travailler facilement avec des calendriers en Python.

Pour afficher le calendrier de juillet 2021, écrivez :

import calendar

mth_calendar = calendar.TextCalendar(0).formatmonth(2021, 7)
print(mth_calendar)

Et voici le résultat :

Pour afficher l'intégralité du calendrier 2021, nous pouvons taper ce qui suit :

import calendar

yr_calendar = calendar.TextCalendar(0).formatyear(2021)
print(yr_calendar)

On peut aussi changer le premier jour de la semaine (lundi/dimanche) en modifiant le firstweekday paramètre. Nous faisons cela en entrant un entier entre 0 et 6 , où lundi =0 et dimanche =6 .

import calendar

# Set Thursday as first day of the month
mth_calendar = calendar.TextCalendar(firstweekday=3).formatmonth(2021, 7)
print(mth_calendar)

Aussi, en changeant TextCalendar à HTMLCalendar , nous pouvons afficher le calendrier sous forme HTML. Il renverra le calendrier avec ses balises HTML correspondantes à afficher sur une page Web. La syntaxe est la suivante :

import calendar

mth_calendar = calendar.HTMLCalendar(firstweekday=0).formatmonth(2021, 7)
print(mth_calendar)

Voyons ensuite comment calendar.monthrange(year, month) renvoie le premier jour du mois et le nombre de jours de ce mois particulier. Par exemple :

calendar.monthrange(2021, 8)

Sortie :

(6, 31)

Cela signifie que le premier jour d'août 2021 est un dimanche et qu'il y a 31 jours dans le mois.

On peut aussi utiliser le isleap() méthode pour vérifier si une année est une année bissextile. Il renverra une valeur booléenne de True si la valeur est une année bissextile et False si ce n'est pas le cas. Voici un exemple :

import calendar

print(calendar.isleap(2021))

Et le résultat :

False

Ensuite, calendar.weekday(year, month, day) renverra le jour de la semaine d'une date donnée. Par exemple, quel était le jour de la semaine du 14 juillet 1789, date choisie pour commémorer la fête nationale française ?

import calendar

calendar.weekday(1789, 7, 14)

Sortie :

1

C'était un mardi.

Si vous souhaitez explorer le module de calendrier plus en détail, vous trouverez la documentation officielle ici.

Comment utiliser la flèche en Python

Arrow est une autre excellente bibliothèque Python, nommée d'après Arrow of Time. C'est le concept de sens unique du temps ou "asymétrie". La flèche du temps fait référence à la façon dont nous voyons toujours les choses progresser dans une direction particulière (à sens unique). Il fait référence à l'inévitable "flux de temps" dans le futur.

Contrairement à datetime et calendar , qui sont des modules intégrés, arrow doit être installé. Vous pouvez le faire avec pip :

pip install arrow 

Nous pouvons utiliser arrow pour obtenir le Temps Universel Coordonné :

import arrow

utc = arrow.utcnow()
print(utc)

La sortie est :

2021-07-28T14:04:48.910069+00:00

Aussi, nous pouvons utiliser la flèche pour obtenir l'heure locale :

import arrow

now = arrow.now()
print(now)

Résultat :

2021-07-28T22:06:14.795852+08:00

Si nous voulons analyser une chaîne dans un format de date, nous devons utiliser get() :

# Import
import arrow
 
# Date in string format
date_str ='2021-07-20 15:20:35'
 
# Parse string into date
date_f = arrow.get(date_str, 'YYYY-MM-DD HH:mm:ss')
 
# Print the date
print(date_f)

Sortie :

2021-07-20T15:20:35+00:00

Notez que Arrow utilise une syntaxe plus simple et plus courte pour analyser la date que datetime est strptime() .

Il est également possible de récupérer une date à partir d'une chaîne comme la phrase ci-dessous :

# Import
import arrow

# Retrieve date from string
get_dt_f_str = arrow.get('Olympic games started on 23 July 2021', 'D MMMM YYYY')

# Print date from string 
print(get_dt_f_str)

Résultat :

2021-07-23T00:00:00+00:00

Ensuite, nous pouvons utiliser format() pour formater une date sous forme de chaîne :

# Import 
import arrow

# Get local time
now = arrow.now()

# Print the year
year = now.format('YYYY')
print("Year: {0}".format(year))

# Print the date as year, month, day
date = now.format('YYYY-MM-DD')
print("Date: {0}".format(date))

# Print the date and the time 
date_time = now.format('YYYY-MM-DD HH:mm:ss')
print("Date and time: {0}".format(date_time))

# Print the date, time and time zone 
date_time_zone = now.format('YYYY-MM-DD HH:mm:ss ZZ')
print("Date and time and zone: {0}".format(date_time_zone))

Sortie :

Year: 2021
Date: 2021-07-28
Date and time: 2021-07-28 22:12:02
Date and time and zone: 2021-07-28 22:12:02 +08:00

On peut aussi récupérer un jour de la semaine :

# Import 
import arrow

# Get the date
bastille_day = arrow.get('1789-07-14')

# Print the weekday and format it in a readable way
print(bastille_day.weekday())
print(bastille_day.format('dddd'))

Sortie :

1
Tuesday

Nous pouvons également obtenir l'heure dans une autre partie du monde via la conversion. Voici un exemple :

# Import
import arrow

# Get local time
utc = arrow.utcnow()

# Get time in different parts of the world
print("Time in US/Pacific:", utc.to('US/Pacific').format('HH:mm:ss'))
print("Time in Europe/Paris:", utc.to('Europe/Paris').format('HH:mm:ss'))
print("Time in Asia/Tokyo:",utc.to('Asia/Tokyo').format('HH:mm:ss'))

Sortie :

Time in US/Pacific: 07:18:37
Time in Europe/Paris: 16:18:37
Time in Asia/Tokyo: 23:18:37

Ensuite, décalons le temps :

# Import
import arrow

# Get current time
now = arrow.now()

# Shift time 3 hours into the future
print("In 3 hours, it will be:", now.shift(hours=3).time())

# Shift time 3 days into the future
print("In 3 days, the date will be:", now.shift(days=3).date())

# Shift time 5 years into the past
print("5 years ago, the date was:", now.shift(years=-5).date())

Sortie :

In 3 hours, it will be: 01:23:20.609249
In 3 days, the date will be: 2021-07-31
5 years ago, the date was: 2016-07-28

Vous pouvez mélanger différents arguments ensemble, par exemple, now.shift(days=3, hours=6) .

De plus, nous pourrions être intéressés par le formatage de l'heure pour les humains afin qu'elle soit plus lisible que les longues chaînes que nous obtenons.

Le humanize() est un moyen pratique et puissant d'obtenir une sortie lisible par l'homme. Écrivons un exemple :

# Import 
import arrow

# Get current time
now = arrow.now()

# Get a readable information about time
moment_ago = now.shift(minutes=-15).humanize()
print(moment_ago)

# Get human-readable information about time
future_moment = now.shift(hours=5).humanize()
print(future_moment)

Sortie :

15 minutes ago
in 5 hours

D'autre part, nous pouvons utiliser dehumanize() pour rendre une date plus conviviale :

# Import
import arrow 

# Get current time
current_time = arrow.utcnow()

# Set time two days ago
two_days_ago = current_time.dehumanize("2 days ago")
print(two_days_ago)

Résultat :

2021-07-26T14:31:33.975369+00:00

Le arrow module offre une sortie plus lisible que datetime et calendar .

Par rapport à datetime , la flèche facilite la création, la manipulation, le formatage et la conversion des dates, heures, horodatages, fuseaux horaires, etc. Cela nécessite moins de code et moins de dépendance vis-à-vis d'autres importations ou bibliothèques. Dans l'ensemble, l'utilisation du module de flèche est plus efficace que les modules intégrés de Python.

Enfin, c'est toujours une bonne idée de lire la documentation officielle lorsque nous apprenons quelque chose de nouveau.

Entraînez-vous à travailler avec les modules de date et d'heure de Python

Nous avons examiné le datetime module et couvert le calendar et les modules fléchés en Python. C'est un peu de terrain, et j'espère que cela vous a aidé à comprendre comment manipuler les données de date et d'heure avec Python.

Essayez d'exécuter ces extraits de code et jouez avec eux pour consolider vos connaissances.

Si vous souhaitez acquérir une expérience pratique de l'utilisation des modules de science des données de Python, je vous recommande la mini-piste LearnSQL.com Python for Data Science. Ses cinq cours et plus de 300 exercices vous donneront beaucoup de pratique ! Ou consultez notre mini-track Traitement des données avec Python, qui explique en détail comment traiter différents types de données dans différents formats de fichiers. Bon apprentissage !