1

我需要在 API 中查询数月期间的数据。但是,API 阻塞的时间间隔超过 3 天。

所以我想创建一个生成器函数,将我的多月日期范围分成 3 天段,我可以在重复调用我的函数命中 API 时使用这些段:当我将开始日期和结束日期传递给它时,它给了我:

  • 第一次给我开始日期,开始日期+3天
  • 下次给我开始日期 + 3 天,开始日期 + 6 天
  • 此后每次都以 3 天为增量前进
  • 直到它到达结束日期,如果我还有 1 或 2 天的数据要抓取,它会给我剩余的天数来达到结束日期
  • 停止

到目前为止,这是我的代码。它会第一次工作,但我不确定下次调用该函数时如何让开始日期增加 3 天。而且我也不确定在到达最终结束日期之前我是否还有 1 或 2 天的时间来将我的until变量设置为最终结束日期——我想现在它只是说“还有不到 3 天的时间最后的日期,所以让我们退出”:

3_day_segmenter(start, end):
    start_date = datetime.strptime(start, '%Y-%m-%d')
    end_date = datetime.strptime(end, '%Y-%m-%d')
    since = start_date
    for date in range(int ((end_date - start_date).days)): 
        until = start_date + datetime.timedelta(days=3)     
        yield since, until
4

1 回答 1

5

根据您的需要生成一个间隔之间的日期时间列表:

from datetime import date, timedelta

def perdelta(start, end, delta):
    curr = start
    while curr < end:
        yield curr, min(curr + delta, end)
        curr += delta

这会产生一个(date1, date2)元组,该元组被限制end为最后一段的日期:

>>> for s, e in perdelta(date(2011, 10, 10), date(2011, 11, 10), timedelta(days=3)):
...     print s, e
... 
2011-10-10 2011-10-13
2011-10-13 2011-10-16
2011-10-16 2011-10-19
2011-10-19 2011-10-22
2011-10-22 2011-10-25
2011-10-25 2011-10-28
2011-10-28 2011-10-31
2011-10-31 2011-11-03
2011-11-03 2011-11-06
2011-11-06 2011-11-09
2011-11-09 2011-11-10

请注意,最后一个结果仅涵盖 2 天。

于 2013-10-10T22:28:10.580 回答