Печатать даты прошлой недели только в соответствии с днями недели - PullRequest
0 голосов
/ 31 октября 2018

У меня есть код ниже:

from datetime import date
from datetime import timedelta
today = datetime.date.today() 

for i in range(0,7):
    print (today - timedelta(days=i))
2018-10-31
2018-10-30
2018-10-29
2018-10-28
2018-10-27
2018-10-26
2018-10-25

Хочу, чтобы я хотел просто печатать будни и исключая выходные. Итак, мой желаемый результат должен быть:

2018-10-31
2018-10-30
2018-10-29
2018-10-26
2018-10-25
2018-10-24
2018-10-23

Где я могу изменить свой код для достижения намеченных результатов?

1 Ответ

0 голосов
/ 31 октября 2018

Использовать datetime.date.weekday(), что:

Возвращает день недели в виде целого числа, где понедельник равен 0, а воскресенье - 6.

from datetime import date
from datetime import timedelta

today = date.today()

for i in range(7):
    d = today - timedelta(days=i)
    if d.weekday() < 5:            # Here
        print(d)

Производит:

2018-10-31
2018-10-30
2018-10-29
2018-10-26
2018-10-25

Это дает вам дни недели, которые выпадают за последние 7 дней. Или, если вы хотите предыдущие 7 рабочих дней, подумайте:

from datetime import date
from datetime import timedelta

today = date.today()

num_weekdays = 0
for i in range(10):
    d = today - timedelta(days=i)
    if d.weekday() < 5:
        print(d)
        num_weekdays += 1

    if num_weekdays >= 7:
        break

Эта версия в основном такая же, с ограничением диапазона, измененным с 7 на 10, и добавленным счетчиком num_weekdays. Мы увеличиваем счетчик, когда печатаем дату, и как только мы нажимаем 7, мы разрываем цикл (в противном случае мы можем вывести 8 дат, в зависимости от дня недели today).

Или другим способом:

from datetime import date
from datetime import timedelta

today = date.today()

prev_days = [today - timedelta(days=i) for i in range(10)]  # Get 10 previous days
prev_days = [d for d in prev_days if d.weekday() < 5]       # Filter out the weekends
for d in prev_days[:7]:                                     # Select the first 7
    print(d)

Похожая идея, мы создаем список из 10 предыдущих дат под названием prev_days. Затем мы фильтруем этот список, отфильтровывая даты выходных. Затем в цикле for мы зацикливаемся только на первых 7 элементах отфильтрованного списка, поэтому мы печатаем не более 7 дат.

...