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