#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)