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 ?

17voto

harryh Points 154

Voici une méthode plus complète qui peut également accepter des noms de mois complets

def month_string_to_number(string):
    m = {
        'jan': 1,
        'feb': 2,
        'mar': 3,
        'apr':4,
         'may':5,
         'jun':6,
         'jul':7,
         'aug':8,
         'sep':9,
         'oct':10,
         'nov':11,
         'dec':12
        }
    s = string.strip()[:3].lower()

    try:
        out = m[s]
        return out
    except:
        raise ValueError('Not a month')

exemple :

>>> month_string_to_number("October")
10 
>>> month_string_to_number("oct")
10

10voto

Encore une fois :

def month_converter(month):
    months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']
    return months.index(month) + 1

7voto

Elyasaf755 Points 183

Nom du mois complet au numéro du mois (par ex. Janvier , Février etc :)

import datetime

month_name = 'January'
month_num = datetime.datetime.strptime(month_name, '%B').month

print(month_num, type(month_num))

>> 1 <class 'int'>

Nom du mois partiel au numéro du mois (par ex. Jan , Fév etc :)

import datetime

month_name = 'Feb'
month_num = datetime.datetime.strptime(month_name, '%b').month

print(month_num, type(month_num))

>> 2 <class 'int'>

Vous pouvez également le formater en représentation à deux chiffres :

month_num = 3
formatted = f"{month_num:02}"

print(formatted, type(formatted))

>> 03 <class 'str'>

Numéro du mois vers le nom complet du mois (représentation à deux chiffres ou non, chaîne ou int) (par ex. '01' , 1 etc :)

import datetime

month_num = '04'  # month_num = 4 will work too
month_name = datetime.datetime(1, int(month_num), 1).strftime("%B")

print(month_name)

>> April

Numéro du mois à nom partiel du mois (représentation à deux chiffres ou non, chaîne ou int) (par ex. '01' , 1 etc :)

import datetime

month_num = 5  # month_num = '05' will work too
month_name = datetime.datetime(1, int(month_num), 1).strftime("%b")

print(month_name)

>> May

1voto

Sian Thompson Points 9

Pour obtenir le nom complet du calendrier à partir du numéro du mois, vous pouvez utiliser calendar.month_name. Veuillez consulter la documentation pour plus de détails : https://docs.python.org/2/library/calendar.html

month_no = 1
month = calendar.month_name[month_no]

# month provides "January":
print(month)

0voto

user12643768 Points 1
form month name to number
d=['JAN','FEB','MAR','April','MAY','JUN','JUL','AUG','SEP','OCT','NOV','DEC']
N=input()
for i in range(len(d)):
    if d[i] == N:
        month=(i+1)
print(month)

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