Python сохраняет ответ JSON ежедневно на основе диапазона дат

#python #json #date

#python #json #Дата

Вопрос:

Например, у нас есть диапазон дат (НАЧАЛО = 2019-01-01, КОНЕЦ = 2019-03-01)

Тогда у нас есть 2 функции:

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, чтобы она принимала основной диапазон дат и выполнялась непрерывно, обрабатывая каждый день.

Например, ЕСЛИ диапазон дат равен (НАЧАЛО = 2019-01-01, КОНЕЦ = 2019-03-01)

Функция 1 будет непрерывно выполняться с этой датой:

  • НАЧАЛО = 2019-01-01, КОНЕЦ = 2019-01-02
  • НАЧАЛО = 2019-01-02, КОНЕЦ = 2019-01-03
  • НАЧАЛО = 2019-01-03, КОНЕЦ = 2019-01-04
  • НАЧАЛО = 2019-01-04, КОНЕЦ = 2019-01-05
  • НАЧАЛО = 2019-01-05, КОНЕЦ = 2019-01-06
  • НАЧАЛО = 2019-01-06, КОНЕЦ = 2019-01-07
  • НАЧАЛО = 2019-01-07, КОНЕЦ = 2019-01-08
  • НАЧАЛО = 2019-01-08, КОНЕЦ = 2019-01-09

До- START=2019-02-28, END = 2019-03-01

И во время обработки данные будут добавляться в тот же файл

РЕДАКТИРОВАТЬ 1: Это обходной путь для извлечения данных ЗА ДЕНЬ в пределах временного диапазона вместо СУММЫ ЗА ПОЛНЫЙ ДИАПАЗОН ДАТ

Комментарии:

1. Я не совсем понимаю, о чем вы спрашиваете. Вы хотите запустить скрипт для диапазона дат и вызвать функцию для диапазонов в 1 день в цикле? Если это так, почему бы просто не отправить SATRT и не ЗАВЕРШИТЬ из main (используя argparse или аналогичный), а затем выполнить цикл по дням?

2. @doctorlove извините за мою ошибку, прекрасно понимаю вас … если я передам диапазон дат, как я объяснил, я буду получать результат В ДЕНЬ, если я укажу ПОЛНЫЙ ДИАПАЗОН ДАТ, то получу результат всего за 3 месяца, этот API не поддерживает измерения.. так что это похоже на обходной путь. Если у вас есть какие-либо альтернативы тому, как сделать это ЗА ДЕНЬ, я буду рад любому решению…

3. Что такое START и END ? Строки, дата-время. объекты даты, другие?

4. Строка @SergeBallesta Или может быть использована эта — (datetime.date.today()).strftime('%Y-%m-%d')

Ответ №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)