Python-从fasta文件中查找最长序列?

Python-从fasta文件中查找最长序列?,python,Python,我需要制作一个程序,打印出fasta文件中最长序列的名称和长度 (注意:这是一个示例文件,我需要制作一个可用于fasta文件中任意数量序列的程序) 所以我还是python的初学者,所以我不知道很多打开文件之类的技巧 我打算把它当作一个普通的文本文件,打开它,把它变成一个列表。我搞砸了如何得到第一个序列的长度,但我不知道如何得到其他序列的长度并有效地比较它们 file = open('fasta.txt','r') file = file.read().split('\n') 有人能帮我开始吗

我需要制作一个程序,打印出fasta文件中最长序列的名称和长度

(注意:这是一个示例文件,我需要制作一个可用于fasta文件中任意数量序列的程序)

所以我还是python的初学者,所以我不知道很多打开文件之类的技巧

我打算把它当作一个普通的文本文件,打开它,把它变成一个列表。我搞砸了如何得到第一个序列的长度,但我不知道如何得到其他序列的长度并有效地比较它们

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
这是从你的文件摘录中给我的:

3731538
3732606
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