Подтвердить что ты не робот

От месяца до месяца и наоборот в python

Я пытаюсь создать функцию, которая может преобразовать номер месяца в сокращенное название месяца или сокращенное имя месяца в номер месяца. Я думал, что это может быть общий вопрос, но я не мог найти его в Интернете.

Я думал о calendar. Я вижу, что для преобразования с номера месяца в сокращенное название месяца вы можете просто сделать calendar.month_abbr[num]. Однако я не вижу способа пойти в другом направлении. Будет ли создание словаря для преобразования другого направления лучшим способом справиться с этим? Или есть лучший способ перейти от номера месяца к месяцу и наоборот?

4b9b3361

Ответ 1

Создание обратного словаря было бы разумным способом сделать это, потому что это довольно просто:

import calendar
dict((v,k) for k,v in enumerate(calendar.month_abbr))

или в последних версиях Python (2.7+), которые поддерживают понимание словаря:

{v: k for k,v in enumerate(calendar.month_abbr)}

Ответ 2

Просто для удовольствия:

from time import strptime

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

Ответ 3

Используя calendar модуль:

Номер-к-Сокр calendar.month_abbr[month_number]

Abbr к Number list(calendar.month_abbr).index(month_abbr)

Ответ 4

Вот еще один способ сделать это.

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]

Ответ 5

Вот более полный метод, который также может принимать полные имена месяцев

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')

Пример:

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

Ответ 6

Еще одно:

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

Ответ 7

Источник информации: Документы Python

Чтобы получить номер месяца от имени месяца, используйте модуль 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')

Ответ 8

Чтобы получить имя месяца с использованием номера месяца, вы можете использовать time:

import time

mn = 11
print time.strftime('%B', time.struct_time((0, mn, 0,)+(0,)*6)) 

'November'