0

そのため、ファイルを読み取り、特定の単語が見つかると2つの値を抽出するスクリプトを作成しようとしています。この場合、文字列'exon'が検出されると、それに続く2つの整数が保存されます。

空の文字列を作成することから始めました。

exon_start = []
exon_end = []

これが私が使用している簡略化されたデータの例です:

for line in data:
    print data

>>>

 exon            1..35
                 /gene="CDKN1A"

 CDS             73..567
                 /translation="MSEPAGDVRQNPCGSKACRRLFGPVDSEQLSRDCDALMAGCIQE
                 ARERWNFDFVTETPLEGDFAWERVRGLGLPKLYLPTGPRRGRDELGGGRRPGTSPALL
                 QGTAEEDHVDLSLSCTLVPRSGEQAEGSPGGPGDSQGRKRRQTSMTDFYHSKRRLIFS
                 KRKP"

 misc_feature    76..78
                 /gene="CDKN1A"


 exon            518..2106
                 /gene="CDKN1A"

re.findall()関数の正規表現モジュールをインポートしてみました。

indx_exon = range(0,len(data))

# so this relates each line of the data to a specific number in the index

最初に、個々の行内の「エクソン」フレーズを認識できませんでした。テキストのどの行にエクソンシーケンスが含まれているかを特定して、re.findall()が機能しているかどうかを確認しました。

for p,line in zip(indx_line,data):

    if re.findall(r'exon',line) is True:
        print p

そして私はなしを得た

私が置くとき:

for p,line in zip(indx_line,data):

    exon_test = re.findall(r'exon',line)
    print exon_test

'exon'を含まない行と'exon'を含む行については、[]の束を取得しました。したがって、re.findall()機能を使用して、各文字列内で出現するすべての「エクソン」を見つけることができることを知っています。

「エクソン」が見つかったときにどのように言うことができるかを正確に知る必要があります。「..」が見つかるまでその行を調べてから、それに隣接する整数を対応するリストに追加します。すなわち

exon_start = [1,518]
exon_end = [35,2106]
4

1 に答える 1

1

問題はif re.findall(r'exon',line) is True:並んでいます。re.finall()返品は致しませTrueんのでFalse。例:

>>> mystr = '123 exon'
>>> import re
>>> re.findall(r'exon', mystr)
['exon']
>>> re.findall(r'exon', mystr) is True
False
>>> bool(re.findall(r'exon',mystr))
True
>>> if re.findall(r'exon', mystr):
...     print 'true'
... 
true

元のコードを次のように変更します。

for p,line in zip(indx_line,data):

    if re.findall(r'exon',line):
        print p

動作させる必要があります。


編集: @TimPietzcker が指摘したようにre、この場合はまったく使用する必要はありません。そして、番号 flanking を取得するという 2 番目の質問に対処するために、..役立つコードを次に示します。

>>> line = ' exon            1..35'
>>> if 'exon' in line:
...     ranges = line.split()[1].split('..')
...     print ranges
...
['1', '35']
于 2012-09-23T22:12:31.560 に答える