许多序列处理软件要求fasta序列为单行,但很多时候下载的序列都是多行fasta序列,因此需要转换成单行fasta格式:
多行fasta文件例如test.fa:
cat test.fa
>seq1
ATTAAAGGTTTATACCTTCC
AATCTGTGTGGCTGTCACTC
ACACGAGTAACTCGTCTATC
>seq2
ATTAAAGGTTTATACCTTCC
AATCTGTGTGGCTGTCACTC
awk '{if($0~/>/) name=$0 ;else seq[name]=seq[name]$0;}END{for(i in seq) print i"\n"seq[i]}}' test.fa
>seq1
ATTAAAGGTTTATACCTTCCAATCTGTGTGGCTGTCACTCACACGAGTAACTCGTCTATC
>seq2
ATTAAAGGTTTATACCTTCCAATCTGTGTGGCTGTCACTC
将多行序列转换为一行序列
seqkit seq test.fa -w 0 > test_w.fa
指定每行输出的碱基数
seqtk seq -l 50 test.fa > test50.fa
只输出序列
seqkit seq test.fa -s -w 0 > test_seq.fa
将只输出的序列的,指定每行输出的碱基数
seqkit seq test_seq.fa -s -w 40 > test_seq40.fa
fr=open('test.fa', 'r') #读文件
fw=open('out.fa', 'w') #写文件
seq={}
for line in fr:
if line.startswith('>'): #判断字符串是否以‘>开始’
name=line.split()[0] #以空格为分隔符。
seq[name]=''
else:
seq[name]+=line.replace('\n', '')
fr.close()
for i in seq.keys():
fw.write(i)
fw.write('\n')
fw.write(seq[i])
fw.write('\n')
fr.close()
根据自己的文件名,修改读入文件名,运行该脚本即可
参考:https://blog.csdn.net/weixin_44022515/article/details/104257520
https://blog.csdn.net/xiaobai1_1/article/details/107330739
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!