如何使用BioPython解析模糊字符

时间:2012-06-21 05:43:49

标签: python parsing sequence biopython

我是Python新手和一般编程人员。我已经安装了BioPython,希望它的一些组件可以帮助我正在处理的脚本。该脚本需要处理许多xread文件,每个文件都包含一个我需要以多种方式切片的矩阵。我希望已经存在一个序列数据类型或类(有区别吗?),它允许以不同于IUPAC格式编码的模糊字符的序列所需的奇数方式进行索引。例如,在序列中。

2-123[01]3-22

字符串文字[01]中的字符代表所表示的DNA序列中的单个模糊字符01。因此切片[-6:]应返回3[01]3-22。我在BioPython文档中找不到任何相关内容,但我可能忽略了它。如果BioPython中有什么内容可以做到这一点,请您指点相关文档吗?

感谢。

1 个答案:

答案 0 :(得分:2)

我不是BioPython专家,但你可以定义自己的类来按照你需要的方式工作。您需要先解析它,也许使用regular expressions。例如:

import re
class Sequence(list):
    def __init__(self, s):
        if isinstance(s, str):
            self.extend(re.findall(r'[^\[\]]|\[\d+\]', s))
        else:
            list.__init__(self, s)
    def __str__(self):
        return ''.join(self)
    def __getslice__(self, i, j):
        l = list(self)
        return Sequence(l[i:j])

测试它:

In [1]: seq = Sequence('2-123[01]3-22')

这是里面的一个清单......

In [2]: seq
Out[2]: ['2', '-', '1', '2', '3', '[01]', '3', '-', '2', '2']

但表现得像一个字符串!

In [3]: print seq
2-123[01]3-22
In [4]: print seq[-6:]
3[01]3-22

也许您需要定义其他methods来获得所需的行为。