название месяца к номеру месяца и наоборот в python
Я пытаюсь создать функцию, которая может преобразовать номер месяца в сокращенное имя месяца или сокращенное имя месяца в номер месяца. Я думал, что это может быть общий вопрос, но я не мог найти его в интернете.
Я думал о календарь модуль. Я вижу, что для преобразования числа месяца сокращенное название месяца вы можете просто сделать calendar.month_abbr[num]
. Однако я не вижу способа пойти в другом направлении. Будет ли создание словаря для преобразования другое направление будет лучшим способом справиться с этим? Или есть лучший способ перейти от названия месяца к номеру месяца и наоборот?
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)}
используя календарь модуль:
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')