用Python处理一个csv文档

以前处理的一般都是用tab分割的文档,即tsv,这次的题目既然是csv,也就是Comma-separated values,那就csv吧,先搞到一个csv的文档,很简单,我有很多tsv的文档,用excel打开,然后另存为csv的文件格式就可以了。


然后打开terminal,


我用的是Pillars.csv,数据源是YGOB(Yeast Genome Order Browser)的Pillars.tab,在命令行里键入python,然后

>>> for line in open("Pillars.csv"):
...         print line.strip().split(",")
... 
['---', '---', '---', '---', '---', '---', '---', '---', '---', '---', '---', 'YAL068C', '---', '---', '---', '---', '---', '---', '---', '---', '---', '---', '---', '---', '---', '---', '---', '---', '---', '---', '---', '---', '---']
中间省略n行...
['Kpol_397.9', 'TPHA0A01390', 'TBLA0H01080', 'NDAI0J00760', 'NCAS0B03300', 'KNAG0A04960', 'KAFR0B05920', 'CAGL0E00913g', 'Suva_2.332', 'Skud_4.426', 'Smik_4.412', 'YDR168W', 'Anc_8.361', 'ZYRO0F14278g', 'TDEL0F04850', 'KLLA0D17226g', 'AGL154W', 'Ecym_4213', 'SAKL0H14674g', 'KLTH0G11330g', 'Kwal_27.11349', '---', '---', '---', '---', '---', '---', '---', '---', '---', '---', '---', '---']
>>> 

本来到此可以结束的,但我想再添个足,把这个文档转化成tab分割的文档保存城Pillar.tab然后和源文档比较一下

>>> open("Pillars.tab","w").write(open("Pillars.csv").read().replace(",","\t"))
>>> 
转换很简单,一行就可以搞定,然后是对比
>>> print open("Pillars.tab").read() == open("Pillars.original.tab").read()
False
>>> 
咦,为啥是Flase呢?出现了什么问题么?我记得windows的csv的回车和linux下有的时候不一样,一个是"\r\n"另一个是"\n",有没有可能是这个原因呢?
>>> content = []
>>> for line in open("Pillars.csv"):
...     content.append(line.strip().replace(",","\t"))
... 
>>> open("Pillars.tab","w").write("\n".join(content))
>>> print open("Pillars.tab").read() == open("Pillars.original.tab").read()
False
我已经把回车都换成"\n"了,为什么还是False,不死心,用Python逐行对比一下:
>>> for (original,now) in zip(open("Pillars.original.tab"),open("Pillars.tab")):
...     if original != now:
...         original
...         now
... 
'---\t---\t---\t---\t---\t---\t---\t---\t---\t---\t---\t---\t---\t---\t---\tKlac_1.trna15S\tAgos_6.trna6S\t---\tSklu_8.trna41S\tKthe_5.trna19S\tKwal_47.trna13S\t---\t---\t---\t---\t---\t---\t---\t---\t---\t---\t---\t---\n'
'---\t---\t---\t---\t---\t---\t---\t---\t---\t---\t---\t---\t---\t---\t---\tKlac_1.trna15S\tAgos_6.trna6S\t---\tSklu_8.trna41S\tKthe_5.trna19S\tKwal_47.trna13S\t---\t---\t---\t---\t---\t---\t---\t---\t---\t---\t---\t---'
>>> 
终于发现问题了,原来源文档的最后一行的结尾有个"\n",而转换过后的文档没有,嗯,到这里为止,这个题目应该算是会了吧,嘿嘿,期待明天的问题,python csv模块。

===============================================================================
附:
这些“习题”源自陈皓叔叔的博文《程序员练级技术攻略》:
http://coolshell.cn/articles/4990.html
我希望尝试跟着他推荐的方式练级,同时把每日的心得放到博客上来供大家分享,也希望各位程序员大牛们指导。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值