#python #loops #for-loop #continue
#python #циклы #для цикла #продолжить
Вопрос:
Мне нужно выполнить цикл функции в зависимости от даты / дня. Мой код выглядит следующим образом:
day = day_number = 1
start_date = datetime.strptime('10/01/20', '%m/%d/%y').date()
for day in range (1,6):
if (start_date.strftime("%A")=="Saturday") or (start_date.strftime("%A")=="Sunday"):
continue
else:
some_function()
output = pd.to_excel("output_day_" str(day_number) ".xlsx")
Эту функцию необходимо запускать в течение 5 дней, начиная с 10/01/20 как day = 1 . Но если день либо суббота, либо воскресенье, он должен пропустить их и перейти к следующему рабочему дню. В этом случае 10/03/20 и 10/04/20 будут day = 3 и day = 4 соответственно, и оба они приходятся на выходные. Цикл должен пропустить как day = 3, так и day = 4 и перейти к day = 5.
Прямо сейчас я получаю результат только для day = 1. Может кто-нибудь, пожалуйста, помочь мне с этим?
Комментарии:
1. Может быть, вы переместите свою логику else внутрь
if not (start_date.strftime("%A")=="Saturday") or (start_date.strftime("%A")=="Sunday"):
2.
start_date
никогда не изменяется. В нижней части цикла добавьте один день кstart_date
использованию datetime.timedelta . Pandas обладает довольно хорошей функциональностью datetime, включая поддержку рабочих дней . pandas.pydata.org/docs/user_guide/timeseries.html
Ответ №1:
Похоже, вы забыли увеличить день и счетчик на количество дней. Я протестировал этот код, он работает гладко. Вам нужно увеличить день на 1. edit1:
import datetime
day = day_number = 0
start_date = datetime.datetime.strptime('10/01/20', '%m/%d/%y').date()
for day in range (1,6):
#print(start_date)
day_number =1
if (start_date.strftime("%A")=="Saturday") or (start_date.strftime("%A")=="Sunday"):
continue
else:
#some_function()
print(day_number)
start_date = datetime.timedelta(days=1)
Комментарии:
1. У этого есть одна проблема. Для 2020/10/05 он по-прежнему показывает day = 3, потому что он пропустил 2020/10/03 и 2020/10/04. В идеале 2020/10/05 должен быть day = 5. Когда дата пропущена, номер дня должен быть пропущен соответствующим образом. Можете ли вы помочь мне, как это изменить?
2. чтобы увеличить количество дней без пропуска, просто переместитесь
day_number =1
в начало, которое находится над оператором if. Это должно внести изменения.3. Да, я понял это. Но день 1 также отсутствует. Если вы видите мой код, everyday должен получать файл output_day_(day_number).xlsx. Это, по-видимому, полностью исключает 1-й день. Прямо сейчас я получаю только output_day_2, output_day_3 и так далее. Output_day_1 отсутствует, потому что я думаю, что он вообще не рассматривается.
4. день необходимо увеличить позже, как это сделано в редактировании, чтобы учесть день1