[python] 파이썬에서 월 이름을 월 번호로 또는 그 반대로

월 숫자를 축약 된 월 이름으로 변환하거나 축약 된 월 이름을 월 숫자로 변환 할 수있는 함수를 만들려고합니다. 나는 이것이 일반적인 질문이라고 생각했지만 온라인에서 찾을 수 없었습니다.

달력 모듈 에 대해 생각하고있었습니다 . 월 번호를 축약 된 월 이름으로 변환하려면 그냥 할 수 있습니다 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