140 votes

Comment faire correspondre le nom du mois au numéro du mois et vice versa ?

J'essaie de créer une fonction qui puisse convertir un numéro de mois en un nom de mois abrégé ou un nom de mois abrégé en un numéro de mois. Je pensais qu'il s'agissait d'une question courante, mais je ne l'ai pas trouvée en ligne.

Je pensais à la calendrier module. Je vois que pour convertir le numéro de mois en nom de mois abrégé, il suffit de faire calendar.month_abbr[num] . Je ne vois pas comment aller dans l'autre sens. La création d'un dictionnaire pour la conversion dans l'autre sens serait-elle la meilleure solution ? Ou existe-t-il un meilleur moyen de passer du nom du mois au numéro du mois et vice versa ?

128voto

David Z Points 49476

Créer un dictionnaire inversé à l'aide de la fonction calendar (que vous devrez importer, comme tout autre module) :

{month: index for index, month in enumerate(calendar.month_abbr) if month}

Dans les versions de Python antérieures à la version 2.7, la syntaxe de compréhension des dictées n'étant pas prise en charge dans le langage, vous devez procéder comme suit

dict((month, index) for index, month in enumerate(calendar.month_abbr) if month)

93voto

Mark Bailey Points 837

Juste pour le plaisir :

from time import strptime

strptime('Feb','%b').tm_mon

77voto

diogobernardino Points 951

Utilisation calendrier module :

Du nombre à l'abréviation calendar.month_abbr[month_number]

Abbr-to-Number list(calendar.month_abbr).index(month_abbr)

29voto

Gi0rgi0s Points 76

Voici une autre façon de procéder.

def monthToNum(shortMonth):
    return {
            'jan': 1,
            'feb': 2,
            'mar': 3,
            'apr': 4,
            'may': 5,
            'jun': 6,
            'jul': 7,
            'aug': 8,
            'sep': 9, 
            'oct': 10,
            'nov': 11,
            'dec': 12
    }[shortMonth]

25voto

theBuzzyCoder Points 1086

Source d'information : Docs Python

Pour obtenir le numéro du mois à partir du nom du mois, utilisez le module datetime.

import datetime
month_number = datetime.datetime.strptime(month_name, '%b').month

# To  get month name
In [2]: datetime.datetime.strftime(datetime.datetime.now(), '%a %b %d, %Y')
Out [2]: 'Thu Aug 10, 2017'

# To get just the month name, %b gives abbrevated form, %B gives full month name
# %b => Jan
# %B => January
dateteime.datetime.strftime(datetime_object, '%b')

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X