【问题标题】:Python save JSON response daily, based on date rangePython 根据日期范围每天保存 JSON 响应
【发布时间】:2019-03-05 12:27:16
【问题描述】:

例如,我们有日期范围(START=2019-01-01,END=2019-03-01)

那么我们有两个函数:

1) 做某事并将响应保存到文件的进程:

def job_function():
     # Date are part of parameters like this:
        dates.gt({}).lt({})'.format(START,END),
     # Here should be the code which ends up with :
        responseMain = requests.get(urlMain, params=params, headers=headers).json()
        with open(FILE_NAME, "a+") as outfile:
             outfile.write(json.dumps(responseMain))

2) 主要的:

if __name__ == '__main__':

  for (something here? or something inside the function 1??) 
     sm_data(START,END)

我需要修改函数 1,它会占用主要的日期范围,并且会通过每天处理来连续运行。

例如 如果日期范围是(START=2019-01-01,END=2019-03-01)

函数 1 将在该日期持续运行:

  • START=2019-01-01, END=2019-01-02
  • START=2019-01-02, END=2019-01-03
  • START=2019-01-03, END=2019-01-04
  • START=2019-01-04, END=2019-01-05
  • START=2019-01-05,END=2019-01-06
  • START=2019-01-06, END=2019-01-07
  • START=2019-01-07,END=2019-01-08
  • START=2019-01-08,END=2019-01-09

直到 - START=2019-02-28,END=2019-03-01

在处理过程中,数据会附加到同一个文件中

编辑 1:这是在时间范围内每天提取数据而不是按完整日期范围求和的解决方法

【问题讨论】:

  • 我不清楚你在问什么。您想为一个日期范围运行脚本,并在循环中调用 1 天范围内的函数吗?如果是这样,为什么不直接从 main 发送 SATRT 和 END(使用 argparse 或类似方法),然后循环播放这些天?
  • @doctorlove 对不起我的错,完全理解你...如果我按照我解释的那样通过日期范围,我将每天收到结果,如果我输入完整日期范围,将收到结果总数3 个月以来,此 API 不支持维度。所以这就像一种解决方法。如果您对如何每天制作它有任何替代方案,我会对任何解决方案感到满意......
  • STARTEND 是什么?字符串、datetime.date 对象、其他?
  • @SergeBallesta String 或者可以使用这个 - (datetime.date.today()).strftime('%Y-%m-%d')

标签: python json date


【解决方案1】:

我在这里假设您的代码包含一个存在两个变量的地方: START=2019-01-01 和 END=2019-03-01。

您只需保存它们并编写一个循环,为每次迭代设置它们并调用sm_data

# ok START and END exist here
# convert them to datetime.date
fmt = '%Y-%m-%d'
cur = datetime.datetime.strptime(START, fmt).date()
end = datetime.datetime.strptime(END, fmt).date()
# prepare the loop:
delta = datetime.timedelta(days=1)
while cur < end:
    START = cur.strftime(fmt)      # current date
    cur += delta                   # next day
    END = cur.strftime(fmt)
    sm_data(START, END)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多