Python-从fasta文件中查找最长序列?
我需要制作一个程序,打印出fasta文件中最长序列的名称和长度 (注意:这是一个示例文件,我需要制作一个可用于fasta文件中任意数量序列的程序) 所以我还是python的初学者,所以我不知道很多打开文件之类的技巧 我打算把它当作一个普通的文本文件,打开它,把它变成一个列表。我搞砸了如何得到第一个序列的长度,但我不知道如何得到其他序列的长度并有效地比较它们Python-从fasta文件中查找最长序列?,python,Python,我需要制作一个程序,打印出fasta文件中最长序列的名称和长度 (注意:这是一个示例文件,我需要制作一个可用于fasta文件中任意数量序列的程序) 所以我还是python的初学者,所以我不知道很多打开文件之类的技巧 我打算把它当作一个普通的文本文件,打开它,把它变成一个列表。我搞砸了如何得到第一个序列的长度,但我不知道如何得到其他序列的长度并有效地比较它们 file = open('fasta.txt','r') file = file.read().split('\n') 有人能帮我开始吗
file = open('fasta.txt','r')
file = file.read().split('\n')
有人能帮我开始吗?我就是在这个问题上找不到立足之地。再说一次,我是一个初学者,之前谷歌的尝试指向使用“biopython”,这是我在课堂上从来没有学过的,所以我想要一些简单一点的东西
任何能帮助我开始的事情都将不胜感激 您应该使用regexp按如下方式拆分序列
file = open('fasta.txt','r')
current_string=""
current_name =""
max = -1000
for line in file:
if line.startswith(">GNOM"):
#last sequence ended:
if len(current_string) > max :
max = len(current_string)
max_name = current_name
#start reading a new sequence:
current_name = line
current_string=""
else:
current_string+=line.strip("\n")
print max_name, max
import re
F=open('fasta.txt','r')
re_seq=re.compile('>GNOM\s(\d+)\ssequence\s(\d+)\n((?:\w*\n)*)')
numlist=[]
lenlist=[]
for occurence in re_seq.finditer(F.read()):
gnom,num,seq=occurence.groups()
numlist.append(num)
lenlist.append(len(seq))
print gnom,num,len(seq)
maxl=max(lenlist)
print "max length :",maxl
for num,length in zip(numlist,lenlist):
if length==maxl:
maxnum=num
print "max number :",maxnum
这是从你的文件摘录中给我的:
37315383732606
373743 743
最大长度:743
最多3个我同意托马斯的意见;没有必要重新发明轮子。下面介绍如何使用BioPython:首先在终端中运行“pip安装BioPython”
from Bio import SeqIO
max_len = 0
max_description = ""
for record in SeqIO.parse('fasta.txt', "fasta"):
if len(record) > max_len:
max_len = len(record)
max_description = record.description
print(max_description)
print(max_len)
这张照片是:
GNOM 373 sequence 15
775
轻松点
与by Biopython类似,但使用Bio.SeqIO.to_dict()
,并按序列长度对fasta进行排序:
# Finding_longest_sequence_from_fasta_file.py
from Bio import SeqIO
with open("fasta.txt", "rU") as handle:
record_dict = SeqIO.to_dict(SeqIO.parse(handle, "fasta"))
for id in sorted(record_dict, key=lambda id: len(record_dict[id].seq), reverse=True):
print id, len(record_dict[id].seq)
print record_dict[id].format("fasta")
break
指向fasta.txt
的链接不再起作用了,下面是我的示例:
$cat fasta.txt
>A
ATCGGTCGAA
>B
ATGGTCTACATAGCTGACAAACAGCACGTAGCAATCGGTCGAATCTCGAGAGGCATATGGTCACATGATCGGTCGAGCGTGTTTCAAAGTTTGCGCCTAG
>C
ATCGGTCGAGCGTGT
$python从\u fasta\u file.py查找\u最长\u序列\u
B 100
>B
ATGGTCTACATAGCTGACAAACAGCACGTAGCAATCGGTCGAATCTCGAGAGGCATATGG
TCACATGATCGGTCGAGCGTGTTTCAAAGTTTGCGCCTAG
所有的序列不能在一行中调整吗,我的意思是,序列1不能在一行而不是6-7行中表示吗?这是文本扭曲的结果还是您的文件格式相同?这个文件是你自己创建的还是已经创建的?你真的应该试试Biopython。下面是让您开始学习的内容:文本文件就是我收到它的方式。下面的答案是否回答了您的问题?你应该接受其中一个。
B 100
>B
ATGGTCTACATAGCTGACAAACAGCACGTAGCAATCGGTCGAATCTCGAGAGGCATATGG
TCACATGATCGGTCGAGCGTGTTTCAAAGTTTGCGCCTAG