【问题标题】:How to parse ambiguous characters with BioPython如何使用 BioPython 解析模棱两可的字符
【发布时间】:2012-06-21 05:43:49
【问题描述】:

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

2-123[01]3-22

字符串文字 [01] 中的字符表示所表示的 DNA 序列中的单个模棱两可的字符,01。所以切片[-6:] 应该返回3[01]3-22。我在 BioPython 文档中找不到任何关于此的内容,尽管我可能忽略了它。如果 BioPython 中有一些东西可以做到这一点,请您指出相关文档吗?

谢谢。

【问题讨论】:

    标签: python parsing sequence biopython


    【解决方案1】:

    我不是 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 以获得所需的行为。

    【讨论】:

    • 这看起来很有希望。我需要一些时间来处理它,但我会让你知道它是怎么回事。
    • @pyrogerg 当然,如果 BioPython 实现了它,那对于初学者来说会更容易。但这个答案旨在展示如何做到这一点。随时问。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-24
    • 1970-01-01
    • 2019-08-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多