Biopython 可以执行 Seq.find() 解释歧义代码吗

Can Biopython perform Seq.find() accounting for ambiguity codes

我希望能够在 Seq 对象中搜索用于解释歧义代码的子序列 Seq 对象。例如,以下应该为真:

from Bio.Seq import Seq
from Bio.Alphabet.IUPAC import IUPACAmbiguousDNA

amb = IUPACAmbiguousDNA()
s1 = Seq("GGAAAAGG", amb)
s2 = Seq("ARAA", amb)     # R = A or G
print s1.find(s2)

如果考虑歧义代码,答案应该是

>>> 2

但我得到的答案是没有找到匹配项,或者

>>> -1

查看 biopython 源代码,似乎没有考虑歧义代码,因为使用私有 _get_seq_str_and_check_alphabet 方法将子序列转换为字符串,然后使用内置字符串方法 find()用来。当然如果是这种情况,"R" 歧义码将被视为文字 "R",而不是 A 或 G。

我可以弄清楚如何用自制的方法来做到这一点,但它似乎应该在使用其 Seq 对象的 biopython 包中处理。我在这里遗漏了什么吗?

有没有一种方法可以搜索解释歧义代码的子序列成员资格?

从我在这里可以从 Seq.find 的文档中读到的内容:

http://biopython.org/DIST/docs/api/Bio.Seq.Seq-class.html#find

似乎此方法的工作原理与 str.find 方法相似,因为它会查找 精确 匹配项。因此,虽然 dna 序列可以包含歧义代码,但 Seq.find() 方法只会在 精确 子序列匹配时 return 匹配。

做你想做的事也许 ntsearch 功能会起作用:

Search for motifs with degenerate positions