我正在尝试创建一个生成器函数来迭代工作日(工作日),跳过周末(假期也会很好!).到目前为止,我只有一个函数可以简单地迭代几天:
def daterange(startDate, endDate):
for i in xrange(int((endDate - startDate).days)):
yield startDate + timedelta(i)
Run Code Online (Sandbox Code Playgroud)
我正在努力找出一种干净,高效,pythonic的方式让发电机在周末和假期跳过.提前致谢!
ear*_*arl 27
我强烈建议使用dateutil库来完成这些任务.在工作日中基本(不忽略假期)迭代器只是:
from dateutil.rrule import DAILY, rrule, MO, TU, WE, TH, FR
def daterange(start_date, end_date):
return rrule(DAILY, dtstart=start_date, until=end_date, byweekday=(MO,TU,WE,TH,FR))
Run Code Online (Sandbox Code Playgroud)
Bre*_*arn 10
假设startDate并且endDate是datetime或date对象,您可以使用该weekday方法获取星期几,然后在星期六或星期日跳过它.做就是了:
def daterange(startDate, endDate):
for i in xrange(int((endDate - startDate).days)):
nextDate = startDate + timedelta(i)
if nextDate.weekday() not in (5, 6):
yield startDate + timedelta(i)
Run Code Online (Sandbox Code Playgroud)
对于假期,您必须手动检查您想要的每个假期.有些假期是以复杂的方式定义的,所以这可能有点棘手.
小智 8
Python pandas 有一个内置方法 bdate_range() ,它的默认频率是工作日。 https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.bdate_range.html
import pandas as pd
pd.bdate_range(start='1/25/2020', end='2/24/2020')
Run Code Online (Sandbox Code Playgroud)
有一个有用的库dateutil,可以为你做这种事情.它可以生成日期范围(或基于自定义规则的日期),不包括某些天,考虑从一天开始的一周等...还有一个比内置日期时间库更灵活的timedelta.
文档位于http://labix.org/python-dateutil/ - 并在PyPi上提供
| 归档时间: |
|
| 查看次数: |
11627 次 |
| 最近记录: |