Преобразовать сокращенное название месяца в python в полное имя

#python #datetime

#python #datetime

Вопрос:

Как я могу преобразовать сокращенное значение месяца, например Apr , в python, в полное имя?

Комментарии:

1. Отсутствует одна важная информация: откуда взялась аббревиатура? Это повлияет на то, должно ли решение учитывать настройки локали.

Ответ №1:

Если вы настаиваете на использовании datetime в соответствии с вашими тегами, вы можете преобразовать короткую версию месяца в объект datetime, а затем переформатировать его с полным именем:

 import datetime
datetime.datetime.strptime('apr','%b').strftime('%B')
 

Комментарии:

1. Почему он не может разобрать Sept как September, что является одним из стандартных сокращений September? Есть какой-нибудь другой способ справиться с этим через какую-нибудь библиотеку?

2. @AfsanAbdulaliGujarati библиотека datetime была написана таким образом. См . , например, strftime.org , который гласит %b : » Месяц как сокращенное название локали » и показан 'Sep' специально в качестве примера. Я подозреваю, что аббревиатура зависит от локали, поэтому в некоторых локалиях может быть возможно, что 'Sept' она анализируется. В любом случае, в некоторых других ответах используется ручное сопоставление длинного и короткого названий месяцев; эти решения можно просто использовать для определения ваших собственных сокращений ( 'Sept' прилагается).

3. Единственное, что меня беспокоит в отношении ручного сопоставления, — это отсутствие других возможных сокращений. Я случайно наткнулся на сентябрьскую вещь.

4. @AfsanAbdulaliGujarati ну, единственная автоматически правильная версия — это то, что поставляется с локализацией. Любой другой выбор является произвольным, поэтому вам придется явно указать, что вы ожидаете проанализировать самостоятельно. Вам все равно нужно знать свои данные, если они в нестандартном формате.

Ответ №2:

Вот способ использования библиотеки календаря.

 >>> import calendar
>>> calendar.month_name [list(calendar.month_abbr).index('Apr')]
'April'
>>>
 

Ответ №3:

 import calendar
months_dict = dict(zip(calendar.month_abbr[1:], calendar.month_name[1:]))
# {'Jan': 'January', 'Feb': 'February', 'Mar': 'March', 'Apr': 'April', 'May': 'May', 'Jun': 'June', 'Jul': 'July', 'Aug': 'August', 'Sep': 'September', 'Oct': 'October', 'Nov': 'November', 'Dec': 'December'}
 

Убедитесь, что вы конвертируете в правильные регистры, исходя из ваших потребностей.

Аналогично, библиотека календаря также имеет calendar.day_abbr и calendar.day_name

Ответ №4:

сработал бы простой словарь

например

 month_dict = {"jan" : "January", "feb" : "February" .... }
 

month_dict[«январь»]

‘Январь’

Ответ №5:

Один быстрый и грязный способ:

 conversions = {"Apr": "April", "May": "May", "Dec": "December"}
date = "Apr"

if date in conversions:
    converted_date = conversions[date]
 

Ответ №6:

Это для смешанных сокращений и полных названий месяцев, например:

 Dec 31, 2017
December 31, 2017
Aug 31, 2017
Feb 10, 2018
March 1, 2018
Jun 2, 2019
 

Если вы делаете это в фрейме данных Pandas с фактическими датами, и вы не
хотите June , чтобы в конечном итоге отображалось Junee :

 def replace_month_abrev(date_string):
    month_dict = {"Jan ": "January ",
              "Feb ": "February ",
              "Mar ": "March ",
              "Apr ": "April ",
              "May ": "May ",
              "Jun ": "June ",
              "Jul ": "July ",
              "Aug ": "August ",
              "Sep ": "September ",
              "Sept ": "September ",
              "Oct ": "October ",
              "Nov ": "November ",
              "Dec ": "December "}
    # find all dates with abrev
    abrev_found = filter(lambda abrev_month: abrev_month in date_string, month_dict.keys())
    # replace each date with its abbreviation
    for abrev in abrev_found:
        date_string = date_string.replace(abrev, month_dict[abrev])
    # return the modified string (or original if no states were found)
    return date_string

combined['deadline'].map(replace_month_abrev)