Я пытаюсь создать функцию, которая может преобразовывать номер месяца в сокращенное название месяца или сокращенное название месяца в номер месяца. Я подумал, что это частый вопрос, но не смог найти его в Интернете.
Я думал о модуле календаря . Я вижу, что для преобразования номера месяца в сокращенное название месяца вы можете просто сделать calendar.month_abbr[num]
. Однако я не вижу возможности пойти в другом направлении. Будет ли создание словаря для преобразования другого направления лучшим способом справиться с этим? Или есть лучший способ перейти от названия месяца к номеру месяца и наоборот?
Используя модуль календаря :
Number-to-Abbr
calendar.month_abbr[month_number]
Abbr-to-Number
list(calendar.month_abbr).index(month_abbr)
источник
list(calendar.month_name).index('January')
Вот еще один способ сделать это.
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]
источник
month_cal = dict((v,k) for v,k in zip(calendar.month_abbr[1:], range(1, 13)))
а затемmonth_cal[shortMonth]
Источник информации: 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_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
источник
Еще один:
def month_converter(month): months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'] return months.index(month) + 1
источник
Основываясь на идеях, изложенных выше, это эффективно для изменения названия месяца на соответствующий номер месяца:
from time import strptime monthWord = 'september' newWord = monthWord [0].upper() + monthWord [1:3].lower() # converted to "Sep" print(strptime(newWord,'%b').tm_mon) # "Sep" converted to "9" by strptime
источник
Чтобы получить полное название календаря из номера месяца, вы можете использовать calendar.month_name. См. Дополнительную информацию в документации: https://docs.python.org/2/library/calendar.html
month_no = 1 month = calendar.month_name[month_no] # month provides "January": print(month)
источник
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)
источник
Вы можете использовать ниже как альтернативу.
from time import strptime
strptime('Feb','%b').tm_mon
import calendar
calendar.month_abbr[2]
илиcalendar.month[2]
источник