название месяца к номеру месяца и наоборот в python


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

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

8 59

8 ответов:

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

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

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

from time import strptime

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

используя календарь модуль:

Number-to-Abbr calendar.month_abbr[month_number]

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

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

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]

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

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

исходная информация: Python Docs

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

еще один:

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

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

import time

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

'November'