Próbuję utworzyć funkcję, która może przekształcić numer miesiąca w skróconą nazwę miesiąca lub skróconą nazwę miesiąca na numer miesiąca. Myślałem, że to częste pytanie, ale nie mogłem go znaleźć w Internecie.
Myślałem o module kalendarza . Widzę, że aby przekonwertować numer miesiąca na skróconą nazwę miesiąca, możesz po prostu zrobić calendar.month_abbr[num]
. Nie widzę jednak sposobu, aby pójść w innym kierunku. Czy stworzenie słownika do konwersji drugiego kierunku byłoby najlepszym sposobem na rozwiązanie tego problemu? A może jest lepszy sposób na przejście od nazwy miesiąca do numeru miesiąca i odwrotnie?
Korzystanie z modułu kalendarza :
Numer-do-skrótu
calendar.month_abbr[month_number]
Skrót do numeru
list(calendar.month_abbr).index(month_abbr)
źródło
list(calendar.month_name).index('January')
Oto kolejny sposób, aby to zrobić.
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]
źródło
month_cal = dict((v,k) for v,k in zip(calendar.month_abbr[1:], range(1, 13)))
month_cal[shortMonth]
Źródło informacji: Python Docs
Aby uzyskać numer miesiąca z nazwy miesiąca, użyj modułu 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')
źródło
Oto bardziej wszechstronna metoda, która może również akceptować pełne nazwy miesięcy
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')
przykład:
>>> month_string_to_number("October") 10 >>> month_string_to_number("oct") 10
źródło
Jeszcze jeden:
def month_converter(month): months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'] return months.index(month) + 1
źródło
Opierając się na pomysłach przedstawionych powyżej, jest to skuteczne w przypadku zmiany nazwy miesiąca na odpowiedni numer miesiąca:
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
źródło
Aby uzyskać pełną nazwę kalendarza na podstawie numeru miesiąca, możesz użyć pliku calendar.month_name. Więcej informacji można znaleźć w dokumentacji: https://docs.python.org/2/library/calendar.html
month_no = 1 month = calendar.month_name[month_no] # month provides "January": print(month)
źródło
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)
źródło
Możesz użyć poniżej jako alternatywy.
from time import strptime
strptime('Feb','%b').tm_mon
import calendar
calendar.month_abbr[2]
lubcalendar.month[2]
źródło