2016-05-21 4 views
0

ATCG DNA配列を読みたいと思って、3位のATCGの数を計算します。ATCG DNA配列を読み、3位でATCGの数を計算する

DNA = AAATTTCCCGGG

このような3位ATCGにおいて:この配列中AA'A'TT'T'CC'C'GG'G」だから

例1について

A = 1 T = 1 C = 1 G = 1。例2の場合

DNA = ATGGTATTTAAA

"G" GT "" TT "T" AA AT ""

私は3,6,9,12場所をカウントしますATCG番号。したがって、このようなDNA A = 2、T = 1 C = 0、G = 1つの

マイtxtファイルに:このような

>seq1 
ATGGTATTTAAA 
ATCGTTTTTAAA 
>seq2 
ATGGTATTTAAA 
ATCGTTTTTAAA 
ATCGTTTTTAAA 
>seq3 
ATGGTATTTAAA 

マイコード:

f = open("a.txt","r") 
seqlist = [] 
for line in f.readlines(): 
    line = line.strip("\n") 
    if line.startswith(">"): 
    print(line) 
    elif line.startswith("A") or line.startswith("T") or line.startswith("C") or line.startswith("G"): 
    seq = line 
    y = 0 
    for y in range(2, len(seq), 3): 
     x = seq[y] 
     print(x) 

今、私は得ることができます3位のATCGであり、私はそれをリストに入れたい。

私はATCGを数えることができます。

しかし、私はそれを1つのリストに入れる方法を知らない。そして、次の結果を得てください。

seq1 A=3 T=3 C=1 G=1 
seq2 A=? T=? C=? G=? 
seq3 A=? T=? C=? G=? 

ありがとうございました。ここで

+0

「第3位のATCGの数を計算する」ということが私にはっきりと分かりません。 –

+0

私は私の質問で例を挙げました。私は第1〜3の第3位のATCGを数えたいと思う。どうもありがとうございました。 – owen

+0

たとえば、seq3(AT "G" GT "A" TT "T" AA "A")。私は3,6,9,12位のATCG番号を数えたいと思う。したがって、seq3 A = 2 T = 1 C = 0 G = 1。 – owen

答えて

1

はできるだけあなたのコードを変更するオプションです:

from collections import Counter 

counter = None 
for line in f.readlines(): 
    line = line.strip("\n") 
    if line.startswith(">"): 
     if counter is not None: 
      print(counter) 
     print(line) 
     counter = Counter() 
    elif line.startswith("A") or line.startswith("T") or line.startswith("C") or line.startswith("G"): 
     seq = line 
     y = 0 
     for y in range(2, len(seq), 3): 
      x = seq[y] 
      counter[x] += 1 
print(counter) 

は出力:

>seq1 
Counter({'A': 3, 'T': 3, 'C': 1, 'G': 1}) 
>seq2 
Counter({'T': 5, 'A': 4, 'C': 2, 'G': 1}) 
>seq3 
Counter({'A': 2, 'T': 1, 'G': 1}) 

そして、ここでは同じことだが、全体的にあなたのコードを改善し、より良い出力のフォーマット:

from collections import Counter 

counter = None 
bases = 'ATCG' 

def print_counter(): 
    print(' '.join('%s=%s' % (k, counter[k]) for k in bases)) 

with open("a.txt", "r") as f: # Always open files like this 
    for line in f: # no need for readlines 
     line = line.strip("\n") 
     if line.startswith(">"): 
      if counter is not None: 
       print_counter() 
      print(line) 
      counter = Counter() 
     elif line and line[0] in bases: 
      counter.update(line[2::3]) 
print_counter() 

出力:

>seq1 
A=3 T=3 C=1 G=1 
>seq2 
A=4 T=5 C=2 G=1 
>seq3 
A=2 T=1 C=0 G=1 
+0

sooooたくさんありがとう!私はこのような形でA =を印刷することができますか? T =? C =? G =?ありがとうございました! – owen

+0

@owen答えを編集しました。 –

+0

ありがとうsoooo :)! – owen

関連する問題