Estoy tratando de crear una función que pueda convertir un número de mes en un nombre de mes abreviado o un nombre de mes abreviado en un número de mes. Pensé que esta podría ser una pregunta común, pero no pude encontrarla en línea.
Estaba pensando en el módulo de calendario . Veo que para convertir de número de mes a nombre de mes abreviado, puede hacerlo calendar.month_abbr[num]
. Sin embargo, no veo la manera de ir en la otra dirección. ¿Crear un diccionario para convertir la otra dirección sería la mejor manera de manejar esto? ¿O hay una mejor manera de pasar del nombre del mes al número del mes y viceversa?
Usando el módulo de calendario :
Número a abreviar
calendar.month_abbr[month_number]
Abbr-to-Number
list(calendar.month_abbr).index(month_abbr)
fuente
list(calendar.month_name).index('January')
Aquí hay otra forma de hacerlo.
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]
fuente
month_cal = dict((v,k) for v,k in zip(calendar.month_abbr[1:], range(1, 13)))
y luegomonth_cal[shortMonth]
Fuente de información: Python Docs
Para obtener el número de mes del nombre del mes, use el módulo de fecha y hora
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')
fuente
Aquí hay un método más completo que también puede aceptar nombres de meses completos
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')
ejemplo:
>>> month_string_to_number("October") 10 >>> month_string_to_number("oct") 10
fuente
Uno mas:
def month_converter(month): months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'] return months.index(month) + 1
fuente
Sobre la base de las ideas expresadas anteriormente, esto es efectivo para cambiar el nombre de un mes a su número de mes apropiado:
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
fuente
Para obtener el nombre completo del calendario a partir del número de mes, puede usar calendar.month_name. Consulte la documentación para obtener más detalles: https://docs.python.org/2/library/calendar.html
month_no = 1 month = calendar.month_name[month_no] # month provides "January": print(month)
fuente
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)
fuente
Puede utilizar a continuación como alternativa.
from time import strptime
strptime('Feb','%b').tm_mon
import calendar
calendar.month_abbr[2]
ocalendar.month[2]
fuente