您的位置:首页 > 编程语言 > Python开发

python获取加拿大国家日平均汇率比数据的脚本DataMake.py

2017-05-09 14:10 776 查看
给出部分元数据数据样式:

TERMS AND CONDITIONS http://www.bankofcanada.ca/terms/
NAME
"Daily exchange rates"

DESCRIPTION
"Daily average exchange rates - published once each business day by 16:30 ET. All Bank of Canada exchange rates are indicative rates only."

SERIES
id,label,description
FXAUDCAD,"AUD/CAD","Australian dollar to Canadian dollar daily exchange rate"
FXBRLCAD,"BRL/CAD","Brazilian real to Canadian dollar daily exchange rate"
FXCNYCAD,"CNY/CAD","Chinese renminbi to Canadian dollar daily exchange rate"
FXEURCAD,"EUR/CAD","European euro to Canadian dollar daily exchange rate"
FXHKDCAD,"HKD/CAD","Hong Kong dollar to Canadian dollar daily exchange rate"
FXINRCAD,"INR/CAD","Indian rupee to Canadian dollar daily exchange rate"
FXIDRCAD,"IDR/CAD","Indonesian rupiah to Canadian dollar daily exchange rate"
FXJPYCAD,"JPY/CAD","Japanese yen to Canadian dollar daily exchange rate"
FXMYRCAD,"MYR/CAD","Malaysian ringgit to Canadian dollar daily exchange rate"
FXMXNCAD,"MXN/CAD","Mexican peso to Canadian dollar daily exchange rate"
FXNZDCAD,"NZD/CAD","New Zealand dollar to Canadian dollar daily exchange rate"
FXNOKCAD,"NOK/CAD","Norwegian krone to Canadian dollar daily exchange rate"
FXPENCAD,"PEN/CAD","Peruvian new sol to Canadian dollar daily exchange rate"
FXRUBCAD,"RUB/CAD","Russian ruble to Canadian dollar daily exchange rate"
FXSARCAD,"SAR/CAD","Saudi riyal to Canadian dollar daily exchange rate"
FXSGDCAD,"SGD/CAD","Singapore dollar to Canadian dollar daily exchange rate"
FXZARCAD,"ZAR/CAD","South African rand to Canadian dollar daily exchange rate"
FXKRWCAD,"KRW/CAD","South Korean won to Canadian dollar daily exchange rate"
FXSEKCAD,"SEK/CAD","Swedish krona to Canadian dollar daily exchange rate"
FXCHFCAD,"CHF/CAD","Swiss franc to Canadian dollar daily exchange rate"
FXTWDCAD,"TWD/CAD","Taiwanese dollar to Canadian dollar daily exchange rate"
FXTHBCAD,"THB/CAD","Thai baht to Canadian dollar daily exchange rate"
FXTRYCAD,"TRY/CAD","Turkish lira to Canadian dollar daily exchange rate"
FXGBPCAD,"GBP/CAD","UK pound sterling to Canadian dollar daily exchange rate"
FXUSDCAD,"USD/CAD","US dollar to Canadian dollar daily exchange rate"
FXVNDCAD,"VND/CAD","Vietnamese dong to Canadian dollar daily exchange rate"

OBSERVATIONS
date,FXAUDCAD,FXBRLCAD,FXCNYCAD,FXEURCAD,FXHKDCAD,FXINRCAD,FXIDRCAD,FXJPYCAD,FXMYRCAD,FXMXNCAD,FXNZDCAD,FXNOKCAD,FXPENCAD,FXRUBCAD,FXSARCAD,FXSGDCAD,FXZARCAD,FXKRWCAD,FXSEKCAD,FXCHFCAD,FXTWDCAD,FXTHBCAD,FXTRYCAD,FXGBPCAD,FXUSDCAD,FXVNDCAD
2017-01-02,,,,,,,,,,,,,,,,,,,,,,,,,,
2017-01-03,0.9702,0.4121,0.1930,1.3973,0.173212,0.01965,0.000100,0.01140,0.2991,0.06439,0.9295,0.1551,0.3976,0.02210,0.3582,0.9264,0.09740,0.001112,0.1465,1.3064,0.04150,0.03739,0.3744,1.6459,1.3435,0.000059
2017-01-04,0.9678,0.4129,0.1920,1.3930,0.171687,0.01959,0.000099,0.01134,0.2961,0.06242,0.9251,0.1546,0.3930,0.02200,0.3550,0.9240,0.09767,0.001111,0.1460,1.3005,0.04141,0.03717,0.3722,1.6377,1.3315,0.000059
2017-01-05,0.9708,0.4133,0.1922,1.4008,0.170792,0.01954,0.000099,0.01145,0.2953,0.06195,0.9285,0.1555,0.3930,0.02225,0.3531,0.9260,0.09743,0.001118,0.1468,1.3083,0.04161,0.03709,0.3674,1.6400,1.3244,0.000058
2017-01-06,0.9668,0.4116,0.1911,1.3953,0.170556,0.01942,0.000099,0.01133,0.2957,0.06213,0.9230,0.1551,0.3921,0.02222,0.3526,0.9202,0.09647,0.001103,0.1461,1.3020,0.04131,0.03704,0.3640,1.6275,1.3214,0.000059
2017-01-09,0.9728,0.4135,0.1907,1.3967,0.170572,0.01942,0.000099,0.01138,0.2955,0.06202,0.9276,0.1546,0.3917,0.02209,0.3527,0.9214,0.09681,0.001100,0.1460,1.3020,0.04129,0.03709,0.3557,1.6084,1.3240,0.000059
2017-01-10,0.9732,0.4140,0.1909,1.3970,0.170439,0.01936,0.000099,0.01141,0.2954,0.06113,0.9236,0.1538,0.3901,0.02200,0.3524,0.9206,0.09651,0.001102,0.1458,1.3012,0.04137,0.03716,0.3499,1.6075,1.3213,0.000059
2017-01-11,0.9788,0.4121,0.1905,1.3916,0.170389,0.01934,0.000099,0.01140,0.2955,0.06040,0.9274,0.1536,0.3907,0.02199,0.3523,0.9214,0.09568,0.001105,0.1455,1.2976,0.04147,0.03719,0.3396,1.6056,1.3250,0.000059
2017-01-12,0.9842,0.4127,0.1903,1.3966,0.169170,0.01928,0.000099,0.01148,0.2943,0.06041,0.9348,0.1542,0.3893,0.02211,0.3498,0.9210,0.09738,0.001117,0.1469,1.3008,0.04161,0.03713,0.3485,1.6024,1.3106,0.000058
2017-01-13,0.9831,0.4089,0.1903,1.3967,0.169375,0.01927,0.000099,0.01144,0.2944,0.06075,0.9339,0.1545,0.3906,0.02203,0.3502,0.9188,0.09722,0.001116,0.1473,1.3016,0.04159,0.03708,0.3501,1.5996,1.3141,0.000058
2017-01-16,0.9837,0.4073,0.1907,1.3950,0.169683,0.01932,0.000098,0.01153,0.2947,0.06075,0.9345,0.1542,0.3906,0.02201,0.3509,0.9206,0.09631,0.001111,0.1470,1.3013,0.04156,0.03715,0.3463,1.5865,1.3152,0.000058
2017-01-17,0.9856,0.4065,0.1905,1.3970,0.168345,0.01922,0.000098,0.01156,0.2926,0.06055,0.9394,0.1543,0.3890,0.02201,0.3481,0.9212,0.09681,0.001122,0.1467,1.3030,0.04159,0.03699,0.3463,1.6160,1.3057,0.000058
2017-01-18,0.9933,0.4086,0.1925,1.4052,0.169739,0.01932,0.000099,0.01160,0.2962,0.06033,0.9450,0.1555,0.3911,0.02219,0.3510,0.9246,0.09729,0.001123,0.1475,1.3119,0.04170,0.03727,0.3483,1.6192,1.3099,0.000058
2017-01-19,1.0051,0.4158,0.1938,1.4159,0.171693,0.01955,0.000100,0.01157,0.2994,0.06075,0.9551,0.1572,0.3983,0.02227,0.3551,0.9325,0.09786,0.001130,0.1484,1.3197,0.04211,0.03760,0.3476,1.6399,1.3303,0.000059
2017-01-20,1.0066,0.4191,0.1940,1.4242,0.171976,0.01959,0.000099,0.01162,0.3001,0.06147,0.9546,0.1583,0.4039,0.02232,0.3558,0.9354,0.09816,0.001135,0.1497,1.3275,0.04225,0.03766,0.3519,1.6453,1.3356,0.000059
2017-01-23,1.0060,0.4198,0.1939,1.4266,0.171346,0.01951,0.000099,0.01174,0.2995,0.06202,0.9586,0.1587,0.4041,0.02234,0.3544,0.9362,0.09828,0.001139,0.1502,1.3297,0.04231,0.03767,0.3529,1.6584,1.3291,0.000059
脚本源码:DataMake.py
#coding=utf8
import urllib2
'''
delData(content,startcon,endcon,starcon):
content-----变量表示文本信息,字符串类型
startcon-----文本以什么内容开始,例如"OBSERVATIONS"
endcon------文本以什么内容结束,例如"SERIES"
starcon-------每行信息开始的内容,例如"2017"
该函数的功能,是获取一个信息列表

getdata()这个函数获取时间,以及汇率的字典样式列表
'''
class DateMake():
def __init__(self):
pass
#数据处理函数,返回一个信息列表
def delData(self,content,startcon,endcon,starcon):
#创建内容保存列表,用来保存列表信息
conlist=[]
#获取第一次出现内容的索引位置
startindex=content.find(startcon)
#获取第一次出现内容的索引位置
stopIndex=content.find(endcon)
#针对内容中特定的一部分进行相应操作
#获得相应的内容列表
for line in content[startindex:stopIndex].split("\n"):
#如果内容片段的每行以特定字段开头
if line.startswith(starcon):
#内容以分号分隔,把分隔的信息放入表中
linelist=line.split(",")
#把内容加入到conlist 中
conlist.append(linelist)
return conlist

#处理操作的数据
def getdata(self):
#创建一个汇率字典用来保存数据文件
rates = {}
try:
#保存日期信息,初始化为Unknown
date = "Unknown"
#获取连接页面内容
fh = urllib2.urlopen("http://www.bankofcanada.ca/valet/observations/group/FX_RATES_DAILY/csv")
#创建一个列表,用来保存需要的信息,包括国家、汇率等
currency=[]
#获取文件中信息并保存在content中
content=fh.read()
#调用delData()方法,获取一个包含国家名的列表
contList=self.delData(content,"SERIES","OBSERVATIONS","FX")
#创建一个列表用来保存国家名
countryList=[]
#从列表中提取国家名
#把国家名放入国家列表中
for con in contList:
#获取带有国家名的字段放在相应变量中
country=con[-1].split()
#去掉国家名称前面的"
country=country[0].lstrip('"')
#把国家名放入国家列表中
countryList.append(country)
#把保存国家名的列表添加到currency列表中
currency.append(countryList)

#调用delData()方法创建一个汇率信息列表
convertList=self.delData(content,"OBSERVATIONS","ERRORS","2017")
#获取数据最新的日期
date= convertList[-1][0]
#对汇率列表进行处理,把去掉日期部分
#把不为空的汇率数据放currency中
for con in convertList:
if not con[2]=="":
currency.append(con[1:])

#调用map、zip、list函数,把currency转换成样式为
#[国家名,汇率信息]的样式的列表
ratelist=map(list,zip(*currency))
for rate in ratelist:
#获取最新的汇率值
value = float(rate[-1])
#指定国家的汇率值
#给rates赋值
rates[unicode(rate[0])] = value
#返回汇率日期与汇率表
return "Exchange Rates Date: " + date,rates
except Exception, e:
#出现异常返回错误值
return "Failed to download:\n%s" % e

mk=DateMake()
print mk.getdata()

运行结果图:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: