Отфильтровать результат json с датой и временем - исключить выходные - Python

Рассмотрим этот код:

def getHistoricRates():
rates = []
response = urlopen('http://data.fixer.io/api/1999-01-01?access_key=my_key')
data = response.read()
rdata = json.loads(data.decode(), parse_float=float) 
rates_from_rdata = rdata.get('rates', {})
for rate_symbol in ['USD', 'GBP', 'HKD', 'AUD']:
    try:
        rates.append(rates_from_rdata[rate_symbol])

    except KeyError:
        logging.warning('rate for {} not found in rdata'.format(rate_symbol)) 
        pass
return rates

Этот код берет из response Ответ API с серией курсов обмена валют с 1999 года по настоящее время, что мне нужно, это понять, как я могу отфильтровать эти данные, взяв date со всех этих лет, но, исключая выходные.

Ответ от этого URL-адреса API выглядит примерно так:

"success":true,"timestamp":915235199,"historical":true,
"base":"EUR","date":"1999-01-01",
"rates":{"ANG":2.086282,"AUD":1.918776,... other currencies}

Я не знаю, объясняю ли я себя, я получаю все исторические данные, но мне нужно на самом деле получить это, кроме выходных.

я знаю это datetime имеет isweekday функции, но я не совсем уверен, как использовать его в этом случае.

Есть идеи?

2 ответа

Решение

Если то, что я понимаю, правильно - вы хотите ставки, соответствующие только датам, которые лежат в будний день. (Поправьте меня если я не прав)

В таком случае вы можете использовать метод datetime day.weekday ().

Объяснение day.weekday () - возвращает день недели в виде целого числа, где понедельник равен 0, а воскресенье - 6. Например, date(2002, 12, 4).weekday() == 2

Таким образом, использование будет что-то вроде этого -

date_str = "1999-01-01"
if datetime.datetime.strptime(date_str,"%Y-%b-%d").weekday()<5: #Converting to a datetime object after which weekday() method call will return <5 for a weekday
    rates = getHistoricRates(date_str) #pass the date_str in the function

Обратитесь сюда для форматирования строки даты, которое я сделал в приведенном выше коде.

из https://docs.python.org/3/library/datetime.html:

date.weekday ()
Возвращает день недели в виде целого числа, где понедельник равен 0, а воскресенье - 6. Например, date(2002, 12, 4).weekday() == 2, среда. Смотрите также isoweekday ().

Я думаю, вы могли бы сделать что-то вроде:

import datetime
dataYear = "year from your data"
dataMonth = "Month from your data"
dataDay = "Day from your data"
dateToCheck = datetime.date(dataYear,dataMonth,dataDay)
if(dateToCheck.weekday() == 5 or dateToCheck.weekday() == 6):
     isWeekend = true
Другие вопросы по тегам