仅打印与工作日相对应的上周日期

Print last week dates only corresponding to weekdays

我有以下代码:

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

我在哪里可以修改我的代码以达到预期的结果?

使用datetime.date.weekday(),其中:

Return the day of the week as an integer, where Monday is 0 and Sunday is 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 个日期。