1

CD で開始コドンと停止コドンを見つけようとしています。正規表現を使用しましたが、この python スクリプトを実行すると、停止コドンの空のリストが表示されます。どんな助けでも大歓迎です。

std_code = {"TTT":"F|Phe","TTC":"F|Phe","TTA":"L|Leu","TTG":"L|Leu","TCT":"S|Ser","TCC":"S|Ser",
            "TCA":"S|Ser","TCG":"S|Ser", "TAT":"Y|Tyr","TAC":"Y|Tyr","TAA":"*|Stp","TAG":"*|Stp",
            "TGT":"C|Cys","TGC":"C|Cys","TGA":"*|Stp","TGG":"W|Trp", "CTT":"L|Leu","CTC":"L|Leu",     
            "CTA":"L|Leu","CTG":"L|Leu","CCT":"P|Pro","CCC":"P|Pro","CCA":"P|Pro","CCG":"P|Pro",
            "CAT":"H|His","CAC":"H|His","CAA":"Q|Gln","CAG":"Q|Gln","CGT":"R|Arg","CGC":"R|Arg",
            "CGA":"R|Arg","CGG":"R|Arg", "ATT":"I|Ile","ATC":"I|Ile","ATA":"I|Ile","ATG":"M|Met",
            "ACT":"T|Thr","ACC":"T|Thr","ACA":"T|Thr","ACG":"T|Thr", "AAT":"N|Asn","AAC":"N|Asn",
            "AAA":"K|Lys","AAG":"K|Lys","AGT":"S|Ser","AGC":"S|Ser","AGA":"R|Arg","AGG":"R|Arg",
            "GTT":"V|Val","GTC":"V|Val","GTA":"V|Val","GTG":"V|Val","GCT":"A|Ala","GCC":"A|Ala",
            "GCA":"A|Ala","GCG":"A|Ala", "GAT":"D|Asp","GAC":"D|Asp","GAA":"E|Glu",
            "GAG":"E|Glu","GGT":"G|Gly","GGC":"G|Gly","GGA":"G|Gly","GGG":"G|Gly"}

cds = ("ATGCTAGCGGTAAATCGTGAATAGGCCTAA")
for i in range (0, len(cds),3):
    print cds[i:i+3]

def translate (cds, std_code):
    protein = ""
    for i in range (0,len(cds),3):
        codon = cds[i:i+3]
        protein = protein + std_code[codon]
    return protein
print translate(cds, std_code)
def codon_usage(cds):
    usage = {}
    for i in range(0,len(cds),3):
        codon = cds[i:i+3]
        if usage.has_key(codon):
            usage[codon] += 1
        else:
            usage[codon] = 1
    return usage
print codon_usage(cds)


import re
pat = '(ATG)+?(?:TAA|TGA|TAG)'
reg = re.compile(pat)
def stop_codons(cds, messages=None,s=0,reg=reg):
    stop_codons = []
    while True:
        ma = reg.search(cds[s:])
        if ma:
            if ma.group(1) == 'ATG':
                break
            else:
                stop_codons.append(ma.group.upper())
                s = s + ma.start() + 1
        else:
            break
    return stop_codons
print stop_codons(cds, messages=None, s=0,reg=reg)      
4

2 に答える 2

3

Biopython の使用を検討しましたか? シーケンスを処理するためのあらゆる種類の組み込みツールがあり、バイオインフォマティクスに関連することをしている場合は、多くの時間を節約できます. 特に、Seqオブジェクトはまさにあなたが探しているものです:

>>> from Bio.Seq import Seq
>>> from Bio.Alphabet import generic_dna
>>> my_dna = Seq("AGTACACTGGT", generic_dna)
>>> my_dna
Seq('AGTACACTGGT', DNAAlphabet())
>>> my_dna.find("ACT")
5

チュートリアルAPI ドキュメントを読んで、アルファベット、コドン テーブル ( Bio.Data.CodonTable) などに関する情報を見つけることを強くお勧めします。

于 2013-03-19T14:19:42.303 に答える
2

あなたのstop_codons機能にはいくつかの問題があります。まず、あなたの正規表現:

(ATG)+?(?:TAA|TGA|TAG)

書かれているように、これは開始コドンとそれに続く停止コドンの繰り返しを検索しています. 書かれている正規表現が一致する場合、開始コドンのみが返され、他には何も返されません。開始コドンの後の最初の終止コドンを見つけたい場合は、次の方法を試すことができます。

(?<=ATG)(?:[ACGT]{3})*(TAA|TGA|TAG)

第二に、正規表現が開始コドンと一致する場合、ループを壊して のリストを返すようstop_codonsです。この関数に渡すすべてのシーケンスが停止の前に開始コドンを含むと仮定すると、常に空のリストが返されます。 . お役に立てれば。

于 2013-03-19T14:39:55.507 に答える