设为首页 收藏本站
查看: 843|回复: 0

[经验分享] [python]沪深龙虎榜数据进一步处理,计算日后5日的涨跌幅

[复制链接]

尚未签到

发表于 2015-11-29 10:48:18 | 显示全部楼层 |阅读模式
  沪深龙虎榜数据进一步处理,计算日后5日的涨跌幅
  事前数据:
  前面处理得到的csv文件
  文件名前加入“[wait]”等待程序处理
  python代码从雅虎股票历史数据api获取数据,计算后面5日的涨跌幅
  雅虎数据api格式:
  priceUrl = 'http://table.finance.yahoo.com/table.csv?s={%1}&d={%2}&e={%3}&f={%4}&g=d&a={%5}&b={%6}&c={%7}&ignore=.csv'
# %1:000001.sz
# END:   %2:月-1 %3:日 %4:年
# STRAT: %5:月-1 %6:日 %7:年
  事前数据截图:
DSC0000.png
  计算后,再用excel的条件格式并另存为excel文件后截图:
DSC0001.png
  代码:



  1 #coding=utf-8
  2
  3 #读取'[wait]'开头的csv文件
  4 #copyright @ WangXinsheng
  5 #http://www.cnblogs.com/wangxinsheng/
  6 import os
  7 import gzip
  8 import re
  9 import http.cookiejar
10 import urllib.request
11 import urllib.parse
12 import time
13 import datetime
14
15 def getOpener(head):
16     # deal with the Cookies
17     cj = http.cookiejar.CookieJar()
18     pro = urllib.request.HTTPCookieProcessor(cj)
19     opener = urllib.request.build_opener(pro)
20     header = []
21     for key, value in head.items():
22         elem = (key, value)
23         header.append(elem)
24     opener.addheaders = header
25     return opener
26
27 def ungzip(data):
28     try:        # 尝试解压
29         print('正在解压.....')
30         data = gzip.decompress(data)
31         print('解压完毕!')
32     except:
33         print('未经压缩, 无需解压')
34     return data
35  
36 #常量
37 header = {
38     #'Connection': 'Keep-Alive',
39     'Accept': '*/*',
40     'Accept-Language': 'zh-CN,zh;q=0.8',
41     'User-Agent': 'Mozilla/5.0 (Windows NT 6.2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36',
42     'Accept-Encoding': 'gzip, deflate',
43     'Host': 'yahoo.com',
44     'Referer' : 'http://www.yahoo.com'
45 }
46 priceUrl = 'http://table.finance.yahoo.com/table.csv?\
47 s={%1}&d={%2}&e={%3}\
48 &f={%4}&g=d&a={%5}&b={%6}&c={%7}&ignore=.csv'
49 # %1:000001.sz
50 # END:   %2:月-1 %3:日-1 %4:年
51 # STRAT: %5:月-1 %6:日 %7:年
52
53
54 path=r'.'
55 files = os.listdir(path)
56 files.sort()
57 out=[]
58
59 for f in files:
60     if(f.startswith('[wait]') and
61        f.endswith('.csv')):
62         #读取文件
63         print('读取文件:'+path+'/'+f)
64         
65         f=open(path+'/'+f,'rt')
66         infos = f.readlines()
67         f.close()
68
69         i = 0
70         add = False
71         for info in infos:
72             if(i==0):
73                 i=i+1
74                 info = info.replace('\n','')+',"一天后","二天后","三天后","四天后","五天后"\n'
75                 out.append(info)
76                 continue
77             elif(len(info.split(','))>9):
78                 out.append(info)
79                 continue
80             else:
81                 #确认需要取的数据范围
82                 tmp = info.split(',')
83                 try:
84                     timeArray = time.strptime(tmp[0], "%Y-%m-%d")
85                 except:
86                     timeArray = time.strptime(tmp[0], "%Y/%m/%d")
87                 timeStamp = int(time.mktime(timeArray))
88                 fromDay = datetime.datetime.utcfromtimestamp(timeStamp)
89                 fromDay = fromDay + datetime.timedelta(days = 1)
90                 endDay = fromDay + datetime.timedelta(days = 15)
91                 code = tmp[1].replace('"','').replace("'","")
92                 if(code.startswith('6')):
93                     code = code +'.ss'
94                 else:
95                     code = code +'.sz'
96                 url = priceUrl.replace('{%1}',code).replace('{%2}',str(endDay.month-1))
97                 url = url.replace('{%3}',str(endDay.day)).replace('{%4}',str(endDay.year))
98                 url = url.replace('{%5}',str(fromDay.month-1)).replace('{%6}',str(fromDay.day))
99                 url = url.replace('{%7}',str(fromDay.year))
100                 print('抓取URL: '+url)
101                 
102                 #通过雅虎获取价格
103                 dd = ''
104                 try:
105                     opener = getOpener(header)
106                     op = opener.open(url)
107                     data = op.read()
108                     data = ungzip(data)
109                     dd = data.decode()
110                 except:
111                     print('网络抓取失败')
112                     out.append(info)
113                     continue
114                 #计算涨跌幅百分比   
115                 if(dd!=''):
116                     dataInfo = dd.split('\n')
117                     j=0
118                     dayCount = 0
119                     startPrice = 0
120                     for x in range(len(dataInfo)-1,0,-1):
121                         #处理数据
122                         if(dataInfo[x]==''):
123                             continue
124                         #print(dataInfo[x])
125                         if(dayCount>5):
126                             break
127                         di = dataInfo[x]
128                         if(dayCount==0):
129                             startPrice = float(di.split(',')[4])
130                         elif(int(di.split(',')[5])!=0):
131                             add = True
132                             closeP = float(di.split(',')[4])
133                             info = info.replace('\n','')+',"'+str(round((closeP-startPrice)/startPrice*100,2))+'%['+str(closeP)+']"'
134                             #print(info)
135                         if(dayCount==0 or int(di.split(',')[5])!=0):
136                             dayCount=dayCount+1
137                             
138                 if(add):
139                     out.append(info+'\n')
140                 #print(out)
141                 continue
142         #输出
143         ff = open(path+'/'+f.name.replace('[wait]','[处理完了]'),'w')
144         for o in out:
145             ff.write(o)
146         ff.close()
147         print('处理完了\n文件地址:'+path+'/'+f.name.replace('[wait]','[处理完了]'))
148     else:
149         continue
  

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-144848-1-1.html 上篇帖子: 通过读写文本文件小结“关于python处理中文编码的问题” 下篇帖子: python笔记_magic变量和函数
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表