#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)