0

考虑这段代码:

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这些年来的数据过滤这些数据,但不包括周末.

这个 api url 的响应是这样的:

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

我不知道我是不是在解释自己,我得到了所有的历史数据,但我需要真正得到这个,不包括周末。

我知道它datetime有一个isweekday功能,但我不确定在这种情况下如何使用它。

有任何想法吗?

4

2 回答 2

2

来自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
于 2018-08-17T13:56:01.670 回答
1

如果我的理解是正确的 - 您只需要与工作日对应的价格。(如果我错了请纠正我)

在这种情况下,您可以使用 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

请参阅此处了解我在上述代码中所做的日期字符串格式。

于 2018-08-17T14:05:12.147 回答