3

私はPythonとプログラミング全般に不慣れです。いくつかのコンポーネントが私が取り組んでいるスクリプトに役立つことを期待して、BioPythonをインストールしました。そのスクリプトは、多くのxreadファイルを処理する必要があります。各ファイルには、いくつかの方法でスライスする必要のあるマトリックスが含まれています。IUPAC以外の形式でコード化されたあいまいな文字を含むシーケンスで必要とされる奇妙な方法でインデックスを作成できるシーケンスデータ型またはクラス(違いはありますか?)がすでに存在することを期待しています。たとえば、シーケンスで。

2-123[01]3-22

文字列リテラル内の文字は、表されるDNAシーケンス内のまたはのいずれかの単一のあいまいな文字を表します[01]。したがって、スライスはを返す必要があります。見落としているかもしれませんが、BioPythonのドキュメントでこれについて何も見つけることができませんでした。これを行うBioPythonに何かがある場合、関連するドキュメントを教えていただけますか?01[-6:]3[01]3-22

ありがとう。

4

1 に答える 1

2

私はBioPythonの専門家ではありませんが、必要に応じて機能するように独自のクラスを定義できます。おそらく正規表現を使用して、最初に解析する必要があります。例えば:

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

たぶん、あなたは望ましい振る舞いを得るためにいくつかの他のメソッドを定義する必要があるでしょう。

于 2012-06-21T17:49:38.280 に答える