Отфильтровать результат 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