如何使用Python选择一年的所有星期天?
使用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)