Home > Net >  For loop with different number of iterations based on datetime
For loop with different number of iterations based on datetime

Time:11-28

I am trying to get hourly data from a JSON file for a 34-month period. To do this I have created a daterange which I use in a nested loop to get data for each day for all 24 hours. This works fine. However, because of daylight savings, there are only 23 daily observations on 3 occasions, the first being 2020-03-29. And therefore, I would like to loop only 23 iterations on this date since my loop crashes otherwise.

Below is my code. Right now it gets stuck on the date for SyntaxError: invalid syntax. But there is a high risk it will get stuck on something else when this is fixed.

Thank you.

start_date = date(2020, 1, 1)
end_date = date(2022, 11, 1)

def daterange(start_date, end_date):
    for n in range(int((end_date - start_date).days)):
        yield start_date   timedelta(n)
parsing_range_svk = []
for single_date in daterange(start_date, end_date):
    single = single_date.strftime("%Y-%m-%d")
    parsing_range_svk.append(single)
######################################

svk =[]
for i in parsing_range_svk:
    data_json_svk = json.loads(urlopen("https://www.svk.se/services/controlroom/v2/situation?date={}&biddingArea=SE1".format(i)).read())
    if i == '2020-03-29'
        for i in range(23):
            rows = data_json_svk['Data'][0]['data'][i]['y']
    else:
        for i in range(24):
            rows = data_json_svk['Data'][0]['data'][i]['y']
    svk.append(rows)

CodePudding user response:

Don't check explicitly for a date, rather use list comprehension to get values you need (it will work correctly for 23/24 hours days):

from urllib.request import urlopen
from datetime import date, timedelta

start_date = date(2020, 1, 1)
end_date = date(2022, 11, 1)


def daterange(start_date, end_date):
    for n in range(int((end_date - start_date).days)):
        yield start_date   timedelta(n)


parsing_range_svk = []
for single_date in daterange(start_date, end_date):
    single = single_date.strftime("%Y-%m-%d")
    parsing_range_svk.append(single)

######################################

url = "https://www.svk.se/services/controlroom/v2/situation?date={}&biddingArea=SE1"

svk = []
for i in parsing_range_svk:
    data_json_svk = json.loads(urlopen(url.format(i)).read())
    svk.append([v["y"] for v in data_json_svk["Data"][0]["data"]])

print(svk)
  • Related