首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在查找字符串中的主题和删除目标序列时的Biopython问题

在查找字符串中的主题和删除目标序列时的Biopython问题
EN

Stack Overflow用户
提问于 2020-11-22 16:56:10
回答 2查看 238关注 0票数 1

嗨,我有一个很大的FASTA文件,看上去像这样

代码语言:javascript
复制
>EMBOSS_001
GTCATCACAGTTTTCCCCGCCCTGTATATGGCTAATAGGCCCTCGCAATCTCCGATAAAT
>EMBOSS_002
CTGATGCTAGTCCCGTGTCCCAAACACTTCCGCAGAAGATCGCCCCGGGGGGCGTGTACC
>EMBOSS_003
CGCGCATGGACTCCATCCGTGATCTTTTGAGGCCATGAGTCCAAGTTTACCTCGGATATA
>EMBOSS_004
CGACCCGCCATTCTCCATCGTAACTTAGTCACGACGACAGTCAGCTTGTTCGTTCGTTAT

我想找出所有具有特定主题的序列,并消除它们,例如,如果主题是TTTCCC,那么预期的输出应该是:

代码语言:javascript
复制
>EMBOSS_002 CTGATGCTAGTCCCGTGTCCCAAACACTTCCGCAGAAGATCGCCCCGGGGGGCGTGTACC
>EMBOSS_003 CGCGCATGGACTCCATCCGTGATCTTTTGAGGCCATGAGTCCAAGTTTACCTCGGATATA
>EMBOSS_004 CGACCCGCCATTCTCCATCGTAACTTAGTCACGACGACAGTCAGCTTGTTCGTTCGTTAT

我用Biopython编写了一段代码:

代码语言:javascript
复制
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,另外,我想要代码,以消除该序列,其中发现的主题。

此外,我无法删除找到母题的字符串并将其写入输出。

代码语言:javascript
复制
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")
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-11-22 23:13:32

我不能在本地测试这个问题,但是我将用一些代码解释如何解决这个问题。

如果文件结构如您所提到的,那么您可以导出的一点是,在检查实例的地方,它们发生在一条偶数行(例如n)上,它们所代表的序列只是n-1。因此,为了以这种格式输出EMBOSS_001 11 TTTCCC,最简单的方法是使用索引i作为计数器并确定顺序。

例如:reads[i-1]将为FASTA GTCATCACAGTTTTCCCCGCCCTGTATATGGCTAATAGGCCCTCGCAATCTCCGATAAAT提供序列>EMBOSS_001。若要删除>,请将其设置为reads[i-1][1:]

要消除motif TTTCCC时的seq,有许多方法可以做到这一点。最简单的方法是对python对象使用del方法。这将简单地删除发生motif的序列和元素。

这可以很容易地完成,这就是您的代码中更改的方式。

代码语言:javascript
复制
for pos, seq in m.instances.search(reads[i].seq):
        print(" %s %i %s" % (reads[i-1][1:],pos, seq))#should print in format EMBOSS_001 11 TTTCCC
        del reads[i-1:i]

希望这能解决这个问题。如果你遇到任何错误,请告诉我。

编辑:,我最初的写作意图应该是这样的--还添加了一个中断语句,看看它是否解决了问题。

代码语言:javascript
复制
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]
        break 
SeqIO.write(reads, "/Users/EMBOSS-6.6.0/emboss/results6.fa", "fasta")

一旦找到了主题,就会消除这一序列。这意味着现在只应该将没有主题的字符串写入SeqIO.write()方法。

票数 2
EN

Stack Overflow用户

发布于 2020-11-25 12:06:29

代码语言:javascript
复制
for i in range(len(reads)):
    for pos, seq in m.instances.search(reads[i].seq):
        seq_rem = str(" %s %i %s" % (reads[i - 0][1:], pos, seq))
        reads_dict = SeqIO.to_dict(reads)
        seq_rem = seq_rem.splitlines()[0][5:]
del reads_dict[seq_rem]
SeqIO.write(reads_dict.values(), "/Users/EMBOSS-6.6.0/emboss/results10.fa", "fasta")

我已经想出了这样的方法

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64956923

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档