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

时间:2015-04-29 20:04:54

标签: python

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

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

Here's the fasta file I'm working with (I named it 'fasta.txt')

所以我仍然是python的初学者,所以我不知道打开文件等很多技巧。

我打算将其视为常规文本文件,将其打开并将其转换为列表。我弄清楚如何获得第一个序列的长度等等,但我不知道如何获得其他序列的长度并有效地比较它们。

file = open('fasta.txt','r')
file = file.read().split('\n')

有人可以帮助我开始吗?我只是无法立足于这个问题。再一次,我是初学者,以前的谷歌尝试指向使用我从未在课堂上学过的'biopython',所以我想要更简单的东西。

任何可以帮助我开始的事情都将非常感激!

2 个答案:

答案 0 :(得分:0)

我同意托马斯的评论;没有必要重新发明轮子。以下是使用BioPython的方法:首先在终端中运行'pip install 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

答案 1 :(得分:0)

类似于Biopython的Turtles Are Cute,但使用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 Finding_longest_sequence_from_fasta_file.py

B 100
>B
ATGGTCTACATAGCTGACAAACAGCACGTAGCAATCGGTCGAATCTCGAGAGGCATATGG
TCACATGATCGGTCGAGCGTGTTTCAAAGTTTGCGCCTAG