python处理fasta文件的模块,
本文主要介绍一个Python脚本从fasta文件中提取单个序列信息的例子。有需要的朋友可以借鉴一下,希望能有所帮助。祝大家进步很大,早日升职加薪。
目录
Python脚本编辑使用文件输入sys模块从命令行获取文件名,用于序列信息统计功能。使用def创建一个函数。格式使用:执行函数计算结果屏幕显示结果输出文件脚本运行
Python脚本编辑
使用Python对fasta格式的序列进行基本信息统计。
预期的设计输出文件包括fasta的文件名、序列的长度、GC的内容和ATCG各自的内容。
使用的文件
test.fasta
统计数据
输入 sys模块
#!/usr/bin/env python
导入系统
从命令行获得文件名称
file_fasta=sys.argv[1]
#获取文件名
file_name=file_fasta.split( . )
name=文件名[0]
Sys.argv[1]模块是从程序外部获取参数的桥梁,可以将命令行的参数输入到py程序中。
Sys.argv[0]是程序本身,sys.argv[1]是程序跟随的第一个参数。
我们使用文件名作为输入参数,这个步骤显示在最终运行中。
在输出结束时,将输出一个包含统计信息的txt文件。我们将用fasta文件名作为txt文件的前缀,所以我们需要获得fasta文件名。
.拆分(.)就是用分隔file_fasta。作为分隔符,它将生成“test”和“txt”。如果分配给文件名,文件名将包含两个字符。
file_name[0]采用第一个值“test”。python中默认第一个数字是0,所以不能输入1。
进行序列信息统计的函数
序列的长度非常好。只需使用len函数,但是计算GC含量和ACTG的百分比需要一些工作。
使用def制作一个函数
用Python def开始函数定义,后面是函数名,括号内是函数的参数,括号内是函数的具体函数实现代码。
定义获取信息(chr):
chr=chr.upper()
count_g=chr.count(G )
count_c=chr.count(C )
count_a=chr.count(A )
count_t=chr.count(T )
命名函数为get_info,内部参数为chr。
现在我们将把fasta中ATCG的基内容赋给chr,基可以是大写也可以是小写,所以我们用。大写所有字符。
然后。count(G )用来统计ATCG各自的个数,并赋给对应的count _ g,我们可以在后面的计算中利用ATCG各自的统计量来免疫N值干扰。
gc=(计数_g计数_c) /(计数_a计数_t计数_c计数_g)
A=(计数a) /(计数a计数t计数c计数g)
T=(计数t) /(计数a计数t计数
t_c + count_g)
C = (count_c) / (count_a + count_t + count_c + count_g)
G = (count_g) / (count_a + count_t + count_c + count_g)
gc_con = {:.2%}.format(gc)
A_content = {:.2%}.format(A)
T_content = {:.2%}.format(T)
C_content = {:.2%}.format(C)
G_content = {:.2%}.format(G)
return (gc_con,A_content,T_content,C_content,G_content)
gc含量计算其等于(G的数量+C的数量)/(A的数量+T的数量+C的数量+G的数量)
A的含量等于(A的数量)/(A的数量+T的数量+C的数量+G的数量),其他值的计算以此类推。
.format使用:
"{1} {0} {1}".format("hello", "world")设置指定位置。'world hello world'
{:.2f} 保留小数点后两位
最后,使用return返回函数结果(gc_con,A_content,T_content,C_content,G_content)
进行函数计算
#进行函数计算with open(file_fasta,r) as read_fa:
读取文件内容赋值给read_fa
python中有两个方式打开文件一种是直接使用open("test.fasta","r"),执行完以后f.close()关闭。
注释:"r"只读模式打开文件;"w"以只写模式打开文件,这种模式下输入内容会覆盖原有内容;"a"以追加模式打开一个文件,这个模式会把新内容追加到原有内容的末尾,不会覆盖。
这里使用的是第二方式with内置函数,它可以将文件自动关闭。
for val in read_fa:val = val.strip()
if not val.startswith(">"):
seq_info = get_info(val)
len_fasta = len(val)
将read_fa内容赋值给val。
strip() 方法用于移除字符串头尾指定的字符(默认为空格或换行符),这里使用默认。
然后使用startswith() 方法用于检查字符串是否是以指定子字符串开头,在当不是>开头的行时候,才对核酸序列才进行信息统计。
len() 方法返回字符长度获得片段长度
结果屏幕展示
#结果屏幕展示print(******\n{0}\nlength:{1}\ngc content :{2}\nA content :{3}\nT content :{4}\nC content :{5}\nG content :{6}\n******.format(name,len_fasta,seq_info[0],seq_info[1],seq_info[2],seq_info[3],seq_info[4]))
使用\n进行换行,用.format指定值输出位置。
结果输出文件
os.write(fd, str)
write() 方法用于写入字符串到文件描述符 fd
#结果输出文件file_output = open("{}sum.txt".format(name),a)
file_output.write(******\n)
file_output.write({}\n.format(name))
file_output.write(length:{:d}\n.format(len_fasta))
file_output.write(gc content :{}\n.format(seq_info[0]))
file_output.write(A content :{}\n.format(seq_info[1]))
file_output.write(T content :{}\n.format(seq_info[2]))
file_output.write(C content :{}\n.format(seq_info[3]))
file_output.write(G content :{}\n.format(seq_info[4]))
file_output.write(******)
file_output.close()
脚本运行
执行脚本(linux系统)
使用ls命令可以看到当前目录下有已经写好的py文件以及数据test.fasta。
运行时注意我们编写时设置从命令行获得文件名称,所以要在后面跟上fasta文件,这样才能成功运行。
运行结束后可以看见屏幕上有结果的打印,同时也生成了testsum.txt。
使用cat命令查看可以看到结果。
以上就是Python脚本提取fasta文件单序列信息实现的详细内容,更多关于Python提取fasta单序列的资料请关注盛行IT软件开发工作室其它相关文章!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。