如何使用Python选择一年的所有星期天?

52 投票
10 回答
57552 浏览
提问于 2025-04-15 17:38

使用Python...

我该如何选择一年中的所有星期天(或者说任何一天)呢?

[ '01/03/2010','01/10/2010','01/17/2010','01/24/2010', ...]

这些日期代表了2010年的所有星期天。我想这也可以适用于一周中的任何一天。

10 个回答

15

使用 dateutil模块,你可以这样生成一个列表:

#!/usr/bin/env python
import dateutil.relativedelta as relativedelta
import dateutil.rrule as rrule
import datetime
year=2010
before=datetime.datetime(year,1,1)
after=datetime.datetime(year,12,31)
rr = rrule.rrule(rrule.WEEKLY,byweekday=relativedelta.SU,dtstart=before)
print rr.between(before,after,inc=True)

虽然不使用dateutil也能找到所有的星期天,但这个模块特别方便,尤其是当你需要进行更复杂或多样的日期计算时。

如果你使用的是Debian或Ubuntu系统,可以通过python-dateutil这个软件包来安装dateutil。

31

Pandas这个库有很强大的功能,可以用来处理这个问题,特别是它的 date_range() 函数。

这个函数的结果是一个pandas的 DatetimeIndex,不过我们可以很简单地把它转换成一个列表。

import pandas as pd

def allsundays(year):
    return pd.date_range(start=str(year), end=str(year+1), 
                         freq='W-SUN').strftime('%m/%d/%Y').tolist()

allsundays(2017)[:5]  # First 5 Sundays of 2017
# ['01/01/2017', '01/08/2017', '01/15/2017', '01/22/2017', '01/29/2017']
75

你可以使用来自 datetime 模块的 date 来找到一年中的第一个星期天,然后每隔七天加一次,生成新的星期天:

from datetime import date, timedelta

def allsundays(year):
   d = date(year, 1, 1)                    # January 1st
   d += timedelta(days = 6 - d.weekday())  # First Sunday
   while d.year == year:
      yield d
      d += timedelta(days = 7)

for d in allsundays(2010):
   print(d)

撰写回答