我试图创建一个 python 程序来读取 fasta 文件“seqs.fa” 并让程序按名称对序列进行排序。
Fasta 文件如下所示:
>seqA - human
GCTGACGTGGTGAAGTCAC
>seqC - gorilla
GATGACAA
GATGAAGTCAG
>seqB - chimp
GATGACATGGTGAAGTAAC
我的程序是这样的:
import sys
inFile = open(sys.argv[1], 'r')
a = inFile.readlines()
a.sort()
seq = ''.join(a[0:])
seq = seq.replace('\n', "\n")
print seq
预期结果:
>seqA - human
GCTGACGTGGTGAAGTCAC
>seqB - chimp
GATGACATGGTGAAGTAAC
>seqC - gorilla
GATGACAAGATGAAGTCAG
我的结果:
>seqA - human
>seqB - chimp
>seqC - gorilla
GATGACAA
GATGAAGTCAG
GATGACATGGTGAAGTAAC
GCTGACGTGGTGAAGTCAC
最后四行是 gorilla 、黑猩猩和人类序列, gorilla 序列分为前两行。
谁能给我一些关于如何排序或解决问题的提示?
请您参考如下方法:
不要自己实现 FASTA 阅读器!像大多数情况一样,有些聪明人已经为您做了这件事。使用例如 BioPython反而。像这样:
from Bio import SeqIO
handle = open("seqs.fa", "rU")
l = SeqIO.parse(handle, "fasta")
sortedList = [f for f in sorted(l, key=lambda x : x.id)]
for s in sortedList:
print s.description
print str(s.seq)
