假設我有一個看起來像這樣的 url,并通過指定以下格式的開始和結束日期來生成 json 格式的資料:“YYYY-MM-DD”。
url = "https://thisisaurl.com/data/asd007?start=2021-10-01&end=2021-10-28"
可以通過此 url 檢索資料的最大天數為 28。為了檢索一年的資料,這意味著我需要:
- 回圈一個日期范圍,每次生成一個
start_date和一個end_date(最多)28天 - 將此饋送到網址
- 每次呼叫 url 時追加/收集此資料
假設我想檢索期間的資料2021-05-01- 2021-10-24,我知道如何以 28 天的時間增量在此日期范圍內回圈,如下所示:
from datetime import date, timedelta
start_date = date(2021, 5, 1)
end_date = date(2021, 10, 24)
delta = timedelta(days=28)
while start_date <= end_date:
print(start_date.strftime("%Y-%m-%d"))
start_date = delta
2021-05-01
2021-05-29
2021-06-26
2021-07-24
2021-08-21
2021-09-18
2021-10-16
但是我很難將這些值作為開始和結束日期分配給 url,以及如何確保生成完整的時間段(例如 2021-10-24 而不是 2021-10-16)。有任何想法嗎?
uj5u.com熱心網友回復:
IIUC,您正在嘗試在回圈中將開始日期和結束日期添加到 url - 您可以使用 來執行此操作f-strings,例如:
from datetime import date, timedelta
start_date = date(2021, 5, 1)
end_date = date(2021, 10, 24)
delta = timedelta(days=28)
base_url = "https://thisisaurl.com/data/asd007?"
while start_date <= end_date:
period_start = start_date.strftime('%Y-%m-%d')
period_end = (start_date timedelta(days=27)).strftime('%Y-%m-%d') #Note: 27 days
print(f'{base_url}start={period_start}&end={period_end}')
start_date = delta
輸出
https://thisisaurl.com/data/asd007?start=2021-05-01&end=2021-05-28
https://thisisaurl.com/data/asd007?start=2021-05-29&end=2021-06-25
https://thisisaurl.com/data/asd007?start=2021-06-26&end=2021-07-23
https://thisisaurl.com/data/asd007?start=2021-07-24&end=2021-08-20
https://thisisaurl.com/data/asd007?start=2021-08-21&end=2021-09-17
https://thisisaurl.com/data/asd007?start=2021-09-18&end=2021-10-15
https://thisisaurl.com/data/asd007?start=2021-10-16&end=2021-11-12
uj5u.com熱心網友回復:
我不確定我是否理解了這個問題,但這能回答嗎?
from datetime import date, timedelta
start_date = date(2021, 5, 1)
end_date = date(2021, 10, 24)
delta = timedelta(days=28)
while start_date < end_date:
end_period = start_date delta
if end_period > end_date:
end_period = end_date
start_str = start_date.strftime('%Y-%m-%d')
end_str = end_period.strftime('%Y-%m-%d')
print('Period from', start_str, 'to', end_str)
print(f'https://thisisaurl.com/data/asd007?start={start_str}&end={end_str}')
start_date = end_period timedelta(days=1)
Period from 2021-05-01 to 2021-05-29
URL: https://thisisaurl.com/data/asd007?start=2021-05-01&end=2021-05-29
Period from 2021-05-30 to 2021-06-27
URL: https://thisisaurl.com/data/asd007?start=2021-05-30&end=2021-06-27
Period from 2021-06-28 to 2021-07-26
URL: https://thisisaurl.com/data/asd007?start=2021-06-28&end=2021-07-26
Period from 2021-07-27 to 2021-08-24
URL: https://thisisaurl.com/data/asd007?start=2021-07-27&end=2021-08-24
Period from 2021-08-25 to 2021-09-22
URL: https://thisisaurl.com/data/asd007?start=2021-08-25&end=2021-09-22
Period from 2021-09-23 to 2021-10-21
URL: https://thisisaurl.com/data/asd007?start=2021-09-23&end=2021-10-21
Period from 2021-10-22 to 2021-10-24
URL: https://thisisaurl.com/data/asd007?start=2021-10-22&end=2021-10-24
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/519394.html
