生物信息脚本练习(1) 找出fasta文件中大于500的序列
来源:互联网 发布:中国航空母舰知乎 编辑:程序博客网 时间:2024/05/22 05:14
最近做了一些生物信息的脚本练习。
这是第一个例子。
找出一个fasta文件中大于500的序列,并重定向到另一个新的文件中。
这个文件每条序列是如下的样子。
c100027.graph_c0|orf3 type=complete len=150nt loc=c100027.graph_c0:123-272:-
ATGAGGATCTTTACGCCAAATGAGGGCCTTGTTGTTGATCTTTTCAGTAAGAGACGTTGC
GGAAATATTGGCGAAAATTTAAGAAACCTAGTTAGTTTTAGCAGCCACATAGTTGGCAAG
AATTATACTATTCAAGCCATGTGGCACTGA
这是我一开始的解法:
思路是用正则匹配第一行中len的数值。找到他们之后,根据这数字算出这条序列有多少行,然后把这么些行的信息输出。
import reoutput = open('data.txt', 'w')seq = []element = []row = []with open ("d:/Zanthoxylum_Bungeanum_Maxim.Unigene.cds.fa","r") as f: for l in f: seq.append(l)for i in seq: if re.match(">.*len=[5-9][0-9][0-9]nt.*",i) or re.match(">.*len=[0-9][0-9][0-9][0-9]nt.*",i): element_number = seq.index(i) #>500序列的标签所处的位置 element.append(element_number) row_number = re.search("len=\d*nt", i).group(0) index = row_number[4:7] row_number = (int(index)// 60) + 1 #每个>500的序列的行数 row.append(row_number)len_row = len(row)def f(n): #输出一个完整的带序列标签的序列 ,共找到n条符合条件序列 x = 0 for i in seq: if x <= row[n]: output.write(seq[element[n]+x]) #输出>之后的碱基序列 x += 1 returnfor i in range(0,len_row): f(i)output.close()
这是我的另外一种解法:
先把序列整合成一个字符串,正则找到之后整个输出,而不是每行输出。
import refw=open('use.fa','w')with open("data1.fa","r") as f: line = f.readlines()for i in line: if i[0]!= ">": i = i.strip("\n") else: i = i.replace(">","\n>") fw.write(i) fw.close()ttt = []with open("use.fa","r") as f: seq = f.readlines() seq = seq[1:] for i in seq: if seq.index(i)%2 ==0: a = re.search("len=\d+",i).group(0) ttt.append(a[4:]) #这个列表只包含所有序列的长度值print(ttt)with open('temp.fa','w') as qq: qq.write(seq[0]) for i in ttt: if int(i)>500: #qq.write(seq[ttt.index(i)]) qq.write(seq[ttt.index(i)+1])
其实python和perl一样,“答案都不止一个”
期待更好的解法
# 8.14更新。我有了更好的解法# 这种把fasta文件转化成字典的方法来自这个论坛,感谢。# http://www.biotrainee.com/forum-59-1.htmlimport osimport reos.chdir("c:/编程题")def readfasta(filename): fa = open(filename, 'r') res = {} ID = '' for line in fa: if line.startswith('>'): ID = line#.strip('\n') res[ID] = '' else: res[ID] += line#.strip('\n') return resoutput = {}res = readfasta('500.fa')regex = re.compile(r'=\d+')for k,v in res.items(): m = regex.findall(k) for n in m: if int(n[1:])> 500: output[k] = vf = open("output.txt" , "w")for k,v in output.items(): f.write(k) f.write(v)f.close()
阅读全文
1 0
- 生物信息脚本练习(1) 找出fasta文件中大于500的序列
- 生信脚本练习(10)找出fasta文件中最长的转录本
- 生物信息脚本练习(2)求反向互补序列
- 生物信息脚本练习(3)gb文件转换
- 生物信息脚本练习(4)按照行列合并文件
- 生信脚本练习(12)求fasta文件各序列长度并统计作图
- perl应用:DNA序列翻译(下):从fasta格式中读取序列,然后输出蛋白质序列,以及fasta格式的介绍
- 生物信息-001-简单的文件数据处理
- 从gff3文件获取fasta序列
- 从gff3文件获取fasta序列(2)
- 从gff3文件获得fasta序列
- 用python编写统计fasta格式的序列的长度脚本
- [python项目一]查找输出fasta序列的gap的起始终止等信息
- C语言读取fasta中核酸序列
- 从gff3中获取fasta序列
- 我的生物信息研究笔记(1)3.23
- 【每日一句shell】找出文件中大于5的数字
- 找出数列中个数大于总数一半的元素
- Unity图片浏览插件——Uniflow源码解析ZZ
- 【DP+组合数学】Codeforces559C[Gerald and Giant Chess]题解
- [PAT乙级]1026. 程序运行时间(15)
- module_init
- CSS初始化代码
- 生物信息脚本练习(1) 找出fasta文件中大于500的序列
- 4.JVM机器指令集
- 《微服务设计》 读书笔记
- HDOJ1098
- leetcode 415. Add Strings
- 【牛腩新闻发布系统】总结篇
- 2015 ACM-ICPC China Shanghai Metropolitan Programming Contest训练总结【6/10】
- Android -- Android 接口定义语言 (AIDL)
- accept函数详解