【发布时间】:2020-11-25 20:15:09
【问题描述】:
您好,我有一个大的 FASTA 文件,看起来像这样
>EMBOSS_001
GTCATCACAGTTTTCCCCGCCCTGTATATGGCTAATAGGCCCTCGCAATCTCCGATAAAT
>EMBOSS_002
CTGATGCTAGTCCCGTGTCCCAAACACTTCCGCAGAAGATCGCCCCGGGGGGCGTGTACC
>EMBOSS_003
CGCGCATGGACTCCATCCGTGATCTTTTGAGGCCATGAGTCCAAGTTTACCTCGGATATA
>EMBOSS_004
CGACCCGCCATTCTCCATCGTAACTTAGTCACGACGACAGTCAGCTTGTTCGTTCGTTAT
我想找到所有具有特定主题的序列并消除它们 例如,如果主题是 TTTCCC,预期的输出应该是:
>EMBOSS_002 CTGATGCTAGTCCCGTGTCCCAAACACTTCCGCAGAAGATCGCCCCGGGGGGCGTGTACC
>EMBOSS_003 CGCGCATGGACTCCATCCGTGATCTTTTGAGGCCATGAGTCCAAGTTTACCTCGGATATA
>EMBOSS_004 CGACCCGCCATTCTCCATCGTAACTTAGTCACGACGACAGTCAGCTTGTTCGTTCGTTAT
我用 Biopython 写了一段代码:
from Bio.Seq import Seq
import Bio.motifs as motifs
from Bio import SeqIO
instances = [Seq("TTTCCC")]
m = motifs.create(instances)
reads = list(SeqIO.parse("/Users/EMBOSS-6.6.0/emboss/genome.fa", "fasta"))
for i in range(len(reads)):
for pos, seq in m.instances.search(reads[i].seq):
print("%i %s" % (pos, seq))
但是它只返回我的主题开始位置的信息,11 TTTCCC 我还想返回找到它的序列的信息: EMBOSS_001 11 TTTCCC 此外,我希望代码能够消除发现主题的那个序列。
此外,我无法删除找到主题的字符串并将其写入输出
for i in range(len(reads)):
for pos, seq in m.instances.search(reads[i].seq):
print(" %s %i %s" % (reads[i - 0][1:], pos, seq))
del reads[i - 0:i]
SeqIO.write(reads, "/Users/EMBOSS-6.6.0/emboss/results6.fa", "fasta")
【问题讨论】: