Скажем, у меня есть список дат, которые отформатированы в одном из пяти способов ниже:Более эффективный способ форматирования дат для в Python для MySQL
Date_Type_1 = 2001 Apr 15
Date_Type_2 = 2001 Apr
Date_Type_3 = 2000 Spring
Date_Type_4 = 2000 Nov-Dec
Date_Type_5 = 2001
Так что мой список дата будет выглядеть следующим образом.
Date_list = ["2001 Apr 15", "2004 May 15", "2011 Jan", "2011 Fall", "2000 Nov-Dec", "2012", "2000 Spring" ]
Теперь я хочу попробовать и отформатировать эти даты, чтобы они могли быть переданы в базу данных MySQL. Единственный способ, которым я знаю, как использовать большой поток условий. Вот пример того, как я это сделаю. Я не буду включать ВСЕ условия, так как это займет слишком много места.
for i in Date_list:
year = i[:4]
#This will be my conditional logic to define a month.
#This is only an example. Will not include all 12 months, 4 seasons, and various bi-months
if "Apr" in i and "Mar-Apr" not in i:
month = 4
if "Mar-Apr" in i:
month = 3
if "May" in i and "May-Jun" not in i:
month = 5
if "Apr-May" in i:
month = 4
if "Spring" in i:
month = 3
#This will be conditional logic to define the day.
#I would do this for each of the 31 days of the month.
if "15" in i and "2015" not in i:
day = 15
date_return = datetime.datetime(year,month,day)
date_format = date_return.date().isoformat
Проблема в том, что я делаю ряд предположений. Я в порядке с определением сезонов «Весна/Лето ..», и двухмесячный (например, Мар/Апр) возвращается в виде конкретных месяцев. Вопрос, по крайней мере, задающих дней он не поймает дней, если:
test_list = [2011 May, 2015 Apr 15]
for i in test_list:
if "15" in i and "2015" not in i:
day = 15
Это не будет ловить день. Мне интересно, есть ли более эффективный способ сделать это? Для этого текущего метода потребуется 50 + условных операторов для определения дня/месяца.
Я не думаю, что ваш код медленный, но выглядит как ваша эффективная средняя короче версия. – YOU
Оба они являются отличными ответами и очень изящными. Спасибо, я бы хотел выбрать оба. – Sean