-------代码许愿池-------
不会写Python代码?不用着急,只需关注“i科研App公众号”,后台回复Python+你想要的代码即可许愿(例如:Python+图片批量插入Word并统一尺寸),许愿后有机会获得师兄代写的Python代码,邀请你的好友一起许愿,获得的概率更大哟~
-------学习讨论-------
下载“i科研”App->
在“互动”板块发帖参与讨论
吃火锅的时候,桌子旁一般都会配备一个菜架,桌子上放不下的菜可以放在菜架上,需要吃的时候再拿过来涮,这个菜架相当于一个小仓库。如果把Python里咱们存放变量的空间看作是火锅桌,那么这个菜架就是我们今天要聊的文本文件(.txt)。
同学们可能会有个疑问,现在都是office的天下了,用word不香吗?为啥还要用txt文件啊。原因很简单,txt文件是一种最简单的文本文件,学习txt文件的读写,方便大家理解Python对文本文件的处理方式,日后再学处理word文档就会更容易上手。此外,科研中的基因、蛋白序列文件、仪器配置文件、导出为txt的图谱文件等都可以作为文本来处理(文末有对fasta序列文件的统计操作示例)。
师兄新建了1个文本文件,输入了火锅菜品的信息,下面我们就来用Python读取并处理里面的内容。首先是读取文本文件,我们在这里会用到open()函数。open()一般传入2个参数:文件绝对路径和读取方式。文件绝对路径就是文件的地址加文件名,这里为’D:test.txt’,表示需要打开D盘下面的test.txt文件。打开方式常用的有3种:’r’只读(仅读取),‘w’写入(打开空白文件并写入,如文件不存在则创建,如文件原来有内容自动清空),’a’增添(不清空原有内容,在原有内容的末尾继续写入)。使用open()打开后还需要用close()去关闭,否则在关闭Python前,这个文件都无法再用其他软件编辑了。
所以这里我们用with open()语句来读取文件,这样在读取完文件后会自动关闭该文件。打开文件后还需要读取内容并赋值给变量(示例中赋值给lines)以便后续处理。这里使用readlines()函数,按行读取文本内容,形成列表。
lines的类型为列表。
说起列表大家就很熟悉啦,上一讲中已经做了介绍。我们可以使用for循环对列表lines的每一个元素,也就是文本文件中的每一行进行分别处理。
其中第一行是标题栏,我们统计的时候需要跳过它,可以给lines列表加一个范围[1:]进行过滤。
现在每一行都是字符串类型的数据,其中菜品、数量和金额依次隔开,我们可以用split()函数将每一行拆分为含有“菜品、数量、金额”3个元素的列表。
下面来盘点一下我们点了哪些菜,仅输出每行第一个元素。
一目了然,我们点了5种菜。点这些菜一共花了多少钱呢?我们对每行第三个做个累加。计算思路是:先定义变量m为0(定义整数并赋值),使用int()函数将每行第三个元素“金额”line.split()[2]由字符串类型转换为整数类型以用于运算,然后把每行的金额用+=运算符累加到变量m,最后用print()函数打印m即得。
最后,我们试着把总金额写回原来的文本文件。用’a’模式打开文件,并用write()函数写入。为了让写入内容另起一行,在写入内容的最前面加上n换行符。
我们打开test.txt文件看一下最后的结果。
这样我们就完成了txt文本文件的读取、数据处理和写入,其实Python用起来很简单对不对?下面用这个方法处理一个fasta文件试试~以HSPA1A基因的fasta文件为例。
我们可以看到文件第一行是基因信息,之后全是基因序列。我们跳过第一行,统计一下序列中ATCG各有多少。达到这个目的的思路有很多,我们运用目前所学的内容写一段代码,使用2层for循环、if语句和累加进行简单统计。
首先定义A,T,C,G为整数0,用for循环遍历lines,line为每行的字符串,之后再用一次for循环对line中每一个字符进行遍历,用if语句判断字符l是ATCG中的哪一个,然后就对这个字符数量+1,最后输出ATCG的累加值即可。对于序列文件的处理你还有其他的想法吗,可以试着写段小程序操作一下~
熟练掌握基本的文本文件操作方法,不断尝试用Python去处理身边的科研数据文件,假以时日就可以成为一名数据处理高手哟~多留意身边的数据文件吧。好啦,本期“师兄带你学Python”就到这里,咱们下期不见不散。
教程往期回顾
【师兄带你学Python-1】你会涮火锅吗?mp.weixin.qq.comhttp://weixin.qq.com/r/HjmutqPEnv7hrefV92wM (二维码自动识别)