嗨,我有一个大的FASTA文件,看起来像这样
>EMBOSS_001
GTCATCACAGTTTTCCCCGCCCTGTATATGGCTAATAGGCCCTCGCAATCTCCGATAAAT
>EMBOSS_002
CTGATGCTAGTCCCGTGTCCCAAACACTTCCGCAGAAGATCGCCCCGGGGGGCGTGTACC
>EMBOSS_003
CGCGCATGGACTCCATCCGTGATCTTTTGAGGCCATGAGTCCAAGTTTACCTCGGATATA
>EMBOSS_004
CGACCCGCCATTCTCCATCGTAACTTAGTCACGACGACAGTCAGCTTGTTCGTTCGTTAT
我想找到所有具有特定主题的序列并消除它们 例如,如果motif为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 我想返回找到它的序列的信息: 压花_001 11 TTTCCC 此外,我希望代码能够消除发现模体的序列
此外,我无法删除找到motif的字符串并将其写入输出
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")
我已经设法想出了这样的办法,效果很好
我无法在本地测试这个问题,但我将用一些代码解释如何着手解决这个问题
如果文件结构如您所述,那么您可以得出的一点是,在检查实例的地方,它们发生在偶数行上(例如
n
),它们所表示的序列只是n-1
。因此,为了以这种格式输出EMBOSS_001 11 TTTCCC
,最简单的方法是使用索引i
作为计数器并确定序列例如:
reads[i-1]
将为FASTAGTCATCACAGTTTTCCCCGCCCTGTATATGGCTAATAGGCCCTCGCAATCTCCGATAAAT
提供序列>EMBOSS_001
。要删除>
,请将其设置为reads[i-1][1:]
要在发现motif
TTTCCC
时消除seq,有很多方法可以做到这一点。最简单的方法是对python列表对象使用del
方法。这将简单地删除序列和基序出现的元素这很容易做到,这就是代码中的更改
这有望解决问题。如果您遇到任何错误,请告诉我
编辑: 我最初的写作意图应该是这样的——我还添加了一个break语句,看看它是否解决了问题
一旦发现了这些图案,就会消除这个序列。这意味着现在只应将没有基序的字符串写入
SeqIO.write()
方法相关问题 更多 >
编程相关推荐