Для продолжения цикла с условием

#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