近20年五粮液股价分析|CSV文件实战处理
这是菜鸟学Python的第68篇原创文章
阅读本文大概需要6分钟
关于装饰器基本介绍我们就讲完了,接下来我们要讲一下Python如何处理一些常见的文件数据,比如CSV文件,Excel文件,JSON和XML文件,还有就HTML文件。其实html文件的处理,涉及爬虫相关的知识(爬虫我后面会写一个入门教程),今天我们主要来学习一下CSV文件的处理
CSV文件处理
CSV文件由任意数目的记录组成,记录间以某种换行符分隔;每条记录由字段组成,字段间的分隔符是其它字符或字符串,最常见的是逗号或制表符
CSV是一种非常通用的文件格式,它可以非常容易地被导入各种PC表格及数据库中,也可以被excel表格打开
Python对CSV的文件处理有自己的内置模块csv,直接导入即可.一般来说掌握最常用的读和写,就可以了.
像这样:
1.读取CSV文件
1).用csv里面的reader函数
一般的csv读和写都是使用逗号做分隔符(delimiter),reader需要传入一个文件句柄,看一下示例代码:
import csv
with open('some.csv', 'rb') as f:
reader = csv.reader(f)
header=reader.next()
print header
for row in reader:
# do something with row, such as row[0],row[1]
在上面的代码中 row 会是一个元组,因此为了访问某个字段,你需要使用下标f访问,而且要注意这个返回的reader是一个迭代器,迭代器只能用next或者for循环来处理
2).我们也可以把数据读到字典中
with open('some.csv','rb') as rf:
reader=csv.DictReader(rf)
for row_dict in reader:
#print row_dict
csv里面的DictReader函数可以把文件读成字典列表,通过for循环把每一行都读出来,每一行其实都是一个字典,可以更具key,value灵活处理
用csv里面的writer函数就可以把内容写到一个新的csv文件, 当然writer一样也需要传入一个写文件句柄
import csv
with open('some.csv', 'wb') as f:
writer = csv.writer(f)
writer.writerows(something)
注意读写的时候最好按照二进制(b)的方式。有同学会问,为啥呢~~
因为跨平台转换的时候,有一些字符会变,特别像是/n,我们称为换行符,'0X0A',到了win平台会变成两个字符'0X0D','0X0A',所以无论读写最好都加一个b,原样读取,比较保险,可以避免一些不必要的麻烦.
实战案例
雅虎网站上有一些现成的股票代码的csv,我们只需要去获取一下这些数据download下来,就可以分析了.
处理过程如下:
1).首先用urllib模块里的urlretrieve抓取五粮液股票的csv文件,并down到本地
2).然后读取文件
3).可以用next读取第一行,也就是股票文件里面的头部信息
>>
['Date', 'Open', 'High', 'Low', 'Close', 'Volume', 'Adj Close']
['2017-03-30', '43.07', '43.50', '42.17', '42.73', '20190900', '42.73']
这是一个20年的五粮液成交记录,是一个很大的csv文件
第一行是头部信息,分日期/开盘价/最高价/最低价/收盘价/成交量/已调整的收盘价
获取二十年来的股票成交量超过2亿元(8个0哦,乖乖~~),然后写到一个新的CVS文件里
处理过程如下:
1).我们先从csv文件中读取
2).把头部信息取出来
3).创建一个写文件的句柄,然后创建一个写csv的句柄
4).循环处理每一行,当每一行的第6项(成交量)大于1亿元的时候,把这一行写入新的csv文件
注意row[5]是股票的成交量,是一个字符串要转为int,不然没法比较,发现20年里只有2天是成交量是超过2亿元的
>>
Date,Open,High,Low,Close,Volume,Adj Close
2009-09-09,24.10,24.43,21.69,22.60,226596800,19.51525
1998-04-27,29.77005,56.99999,29.77005,53.57003,380522000,2.37552
1).urllib网上下载csv文件
2).把csv文件读出来放到read_csv句柄
3).数据清洗,去掉头部,迭代器转成列表,并把日期和股票,构造出字典
4).字典循环一下,获得最高价和对应的日期
用推导列表快速生成字典,然后用max获取最高价,大家发现只要几行就能搞定,如果用java,c++要复杂很多,Python是不是非常高效~~
Python的数据分析是最最强大的地方也是我个人认为最有 魅力的地方,这里只是蜻蜓点水,真正的股票数据挖掘需要更复杂的建模,并且用神器pandas处理,再用matplotlib图形显示结果.好了Python对于CSV文件的处理就讲到这里,是不是觉得蛮好玩的,希望能给初学者一些启发,若有什么不懂的,也可以留言跟我探讨交流.
公号ZZS【100offer】
优秀人才不缺工作机会,只缺适合自己的好机会。但是他们往往没有精力从海量机会中找到最适合的那个。100offer 会对平台上的人才和企业进行严格筛选,让「最好的人才」和「最好的公司」相遇。
扫描下方二维码,注册 100offer,谈谈你对下一份工作的期待。一周内,收到 5-10 个满足你要求的好机会!
欢迎大家关注 菜鸟学Python",更多好玩有趣的Python原创教程,趣味算法,经验技巧,行业动态,尽在菜鸟学Python,一起来学python吧
长按二维码,关注【菜鸟学python】
来源 | 菜鸟学Python
作者 | xinxin
本文章为菜鸟学Python独家原创稿件,未经授权不得转载