#python #datetime #python-3.7
#python #datetime #python-3.7
Вопрос:
Я сам учу python для ATBS. Вместо того, чтобы тратить 45 минут на ввод множества повторяющихся данных в Excel, я потратил последние 90, не сумев написать простой сценарий календаря.
Начиная со значений «2012-09-01» и «2012-09-30», я хочу, чтобы каждая строка увеличивала значение месяца на 1, оно достигает 12, и в этот момент значение года увеличивается на 1, до даты 2018-12-31.
например
«2012-09-01 2012-09-30
2012-10-01 2012-10-31
2012-11-01 2012-11-30
2012-12-01 2012-12-31»
Вот мой код, который останавливается на 2012-12-31.
import datetime
year = 2012
month = 9
day_start = 1
day_end = 31
while year <= 2018:
while month <= 12:
if month == 4 or month == 6 or month == 9 or month == 11:
day_end = 30
else:
day_end = 31
print(datetime.date(year, month, day_start), " ", datetime.date(year, month, day_end))
month = month 1
year = year 1
Любая помощь очень ценится!
Комментарии:
1.2012-09-01 2012-09-30 2012-10-01 2012-10-31 2012-11-01 2012-11-30 2012-12-01 2012-12-31
2. И как вы справляетесь с февралем?
3. взгляните на dateutil relativedelta или pandas date_range .
4. Что такое аббревиатура ATBS?
5. ATBS = Автоматизировать скучные вещи
Ответ №1:
Проверьте это. Использование calendar
библиотеки для определения високосных лет.
import datetime
import calendar
year = 2012
month = 9
day_start = 1
day_end = 31
while year <= 2018:
while month <= 12:
if month == 4 or month == 6 or month == 9 or month == 11:
day_end = 30
elif month == 2:
day_end = 29 if calendar.isleap(year) else 28
else:
day_end = 31
print(datetime.date(year, month, day_start), " ", datetime.date(year, month, day_end))
month = month 1
year = year 1
month = 1
Строка
if month == 4 or month == 6 or month == 9 or month == 11:
может быть сокращено до:
if month in (4, 6, 9, 11):
Комментарии:
1. Это именно то, что я искал. Я ценю приведенные выше предложения о timedelta и т. Д., Но очень полезно использовать мой существующий код, чтобы я мог видеть, что происходит.
2. Когда я смотрю на то, что вы написали, становится понятно, почему он остановился на своих дорожках. Мне нужно было сбросить значение месяца до 1, если я хотел, чтобы оно началось снова в следующем году. Спасибо!