我需要制作一个程序,打印出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',所以我想要更简单的东西。
任何可以帮助我开始的事情都将非常感激!
答案 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