월 숫자를 축약 된 월 이름으로 변환하거나 축약 된 월 이름을 월 숫자로 변환 할 수있는 함수를 만들려고합니다. 나는 이것이 일반적인 질문이라고 생각했지만 온라인에서 찾을 수 없었습니다.
달력 모듈 에 대해 생각하고있었습니다 . 월 번호를 축약 된 월 이름으로 변환하려면 그냥 할 수 있습니다 calendar.month_abbr[num]
. 그래도 다른 방향으로 갈 길은 보이지 않습니다. 다른 방향으로 변환하기위한 사전을 만드는 것이이를 처리하는 가장 좋은 방법일까요? 아니면 월 이름에서 월 번호로 또는 그 반대로 이동하는 더 좋은 방법이 있습니까?
답변
calendar
모듈을 사용하여 역방향 사전을 만듭니다 (다른 모듈과 마찬가지로 가져와야합니다).
{month: index for index, month in enumerate(calendar.month_abbr) if month}
2.7 이전의 Python 버전에서는 dict 이해 구문이 언어에서 지원되지 않기 때문에 다음을 수행해야합니다.
dict((month, index) for index, month in enumerate(calendar.month_abbr) if month)
답변
재미로:
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]
답변
정보 출처 : 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')
답변
다음은 전체 월 이름도 허용 할 수있는보다 포괄적 인 방법입니다.
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