Using Biopython to concatenate (aligned) sequences with the same name (yueyvettehao.netlify.app)
建物种树有很多方法,一是推断祖先序列,二是把所有基因串联起来建树。推断祖先序列可以用PAML,这里想用第二种建物种树的方法做,所以第一步是把所有基因串联起来。
其实有很多软件可以做到串联序列(包括R),但我想用python,因为必应中文搜索不到这篇文章所以就搬运过来了,简单说就是把多个序列文件先cat到一个文件中,然后用biopython里的seq索引找到相同序列名字的序列,再串联起来。其实听起来挺简单的,实现也不难,但是我自己没想到。。。
原文应该用的是python2,如果用python3会报错,所以我改了一下:
from Bio import SeqIO
from collections import defaultdict
sequence_map = defaultdict(str)
for sequence in SeqIO.parse('all.fasta', "fasta"):
sequence_map[sequence.name] += str(sequence.seq)
with open('all_concat.fasta','w') as f:
for key in sorted(sequence_map.keys()):
print ('>' + key, file=f)
print (sequence_map[key], file=f)