Python正規表現で塩基配列検索

以下ではPythonで塩基配列を操作するコードを紹介します。説明は最小限に留めてありますが、C++がわかる人ならばPython初心者でも構文が似ているので意味はわかると思います。

 

1.DNA配列中の各塩基の出現数をカウントする

DNAseq="ACAGAACATTTGCGCCGTCAGCTTGAGAATTCACGGTAATAGTTGGGTGGC"
A=T=G=C=0;
for str in DNAseq:
    print str
    if str=="A":
        A+=1
    if str=="T":
        T+=1
    if str=="G":
        G+=1
    if str=="C":
        C+=1
print "A=",A
print "C=",C
print "G=",G
print "T=",T
print A,C,G,T

 

2.相補的なDNA配列を出力する

DNAseq="GGAAAGCCGCCCTAGAATTCCGTTCCGGCCACG"

Result=""
for str in DNAseq:
    if str=="A":
        Result="T"+Result
    if str=="T":
        Result="A"+Result
    if str=="G":
        Result="C"+Result
    if str=="C":
        Result="G"+Result
print Result

 

3.相補的なDNA配列を出力する(テクニカルなバージョン)

import string
DNAseq="GGAAAGCCGCCCTAGAATTCCGTTCCGGCCACG"
DNAseq=DNAseq[::-1]
print DNAseq.translate(string.maketrans('ATGC', 'TACG'))

translate関数の中で、変換前と変換後の文字の対応を指定します。1文字を1文字に変換することができます。

 

reライブラリとは

Pythonのre (正規表現: Regular Expression)ライブラリを用いると簡単に正規表現による検索ができるようになります。正規表現とは複数の文字列の集合をひとつの文字列として表現する方法です。

 

4.配列中のGGAまたはGGTを検索する

[AT]で「AまたはT」を表します。[ATG]とすれば「AまたはTまたはC」を表します。

import re
seq="GGTGACTGTGGAGTGACGGAGTGACAGCCG"
pattern=r"GG[AT]"
ite=re.finditer(pattern,seq)
for match in ite:
    print match.group(), match.start()

 

5.配列中のGGAまたはGGTまたはGGGを検索する

GG[ATG]としてもできますが、「?以外」を表す^記号を使うと簡単に書けます。C以外なので^Cとします。

import re
seq="GGTGACTGTGGAGTGACGGAGTGACAGCCG"
pattern=r"GG^C"
ite=re.finditer(pattern,seq)
for match in ite:
    print match.group(), match.start()

 

6.配列中のGGAまたはGGTまたはGGGまたはGGCを検索する

GG[ATGC]としてもできますが、「いずれか1文字」を表す.記号(ピリオド)を使うと簡単に書けます。

import re
seq="GGTGACTGTGGAGTGACGGAGTGACAGCCG"
pattern=r"GG."
ite=re.finditer(pattern,seq)
for match in ite:
    print match.group(), match.start()