我有几个大的fasta文件,其中的序列保存在多行中。
>header1
AGTCGTAGCTACGTACGTACGTGTACGTACGTA
TGACGTACGTAGCTGCATGCTA
>header2
TGCAGATCGTAGTCGATGCTAGTGCATGCATGT
ACGTAGTGCAG
...
我想把它转换成fasta文件,把序列组合成一行。
>header1
AGTCGTAGCTACGTACGTACGTGTACGTACGTATGACGTACGTAGCTGCATGCTA
>header2
TGCAGATCGTAGTCGATGCTAGTGCATGCATGTACGTAGTGCAG
...
我的fasta文件很大,所以我需要一个内存高效的方法(因为序列文件比我的内存大)。因此我不能使用Biopython(下面是我的Biopython问题的解决方案,以防对任何人都有帮助,这是来自
Biostars
)
from Bio import SeqIO
import re
def multi2linefasta(indir,outdir,filelist):
for items in filelist:
mfasta = outdir +"/"+re.sub('\..*','',items)+'_twoline.fasta'
ifile = open(indir+'/'+items,'rU')
with open(mfasta, 'w') as ofile:
for record in SeqIO.parse(ifile, "fasta"):
sequence = str(record.seq)
ofile.write('>'+record.id+'\n'+sequence+'\n')