计算核苷酸和序列

时间:2017-05-27 23:25:31

标签: python python-3.x count

我在Python中同时计算核苷酸和序列的问题。这是fasta文件,我需要计算核苷酸和序列。请看下面的asnwer:

>chr12_9180206_+:chr12_118582391_+:a1;2 total_counts: 115 Seed: 4 K: 20 length: 79
TTGGTTTCGTGGTTTTGCAAAGTATTGGCCTCCACCGCTATGTCTGGCTGGTTTACGA
GCAGGACAGGCCGCTAAAGTG
>chr12_9180206_+:chr12_118582391_+:a2;2 total_counts: 135 Seed: 4 K: 20 length: 80
CTAACCCCCTACTTCCCAGACAGCTGCTCGTACAGTTTGGGCACATAGTCATCCCACTCG
GCCTGGTAACACGTGCCAGC
>chr1_8969882_-:chr1_568670_-:a1;113 total_counts: 7600 Seed: 225 K: 20 length: 86
CACTCATGAGCTGTCCCCACATTAGGCTTAAAAACAGATGCAATTCCCGGACGTCTAAAC
CAAACCACTTTCACCGCCACACGACC
>chr1_8969882_-:chr1_568670_-:a2;69 total_counts: 6987 Seed: 197 K: 20 length: 120
TGAACCTACGACTACACCGACTACGGCGGACTAATCTTCAACTCCTACATACTTCCCCCA
TTATTCCTAGAACCAGGCGACCTGCGACTCCTTGACGTTGACAATCGAGTAGTACTCCCG

我的代码:

f= open("data/assembledSeqs.fa", 'r')
texto =f.read()
f.close()
TotalA=0
TotalC=0
TotalG=0
TotalT=0
cont=0

for linea in texto.split('\n'):
    if linea.startswith('>'):
    print ("Secuencia: %d") % cont
    cont+=1
else:
    TotalA=linea.count('A')
    TotalC=linea.count('C')
    TotalG=linea.count('G')
    TotalT=linea.count('T')
    print("Numero de A's: %d")%TotalA
    print("Numero de C's: %d")%TotalC
    print("Numero de G's: %d")%TotalG
    print("Numero de T's: %d")%TotalT

它的回归:

Secuencia: 0
Numero de A's: 8
Numero de C's: 12
Numero de G's: 16
Numero de T's: 22

Numero de A's: 6
Numero de C's: 5
Numero de G's: 8
Numero de T's: 2

Secuencia: 1
Numero de A's: 13
Numero de C's: 23
Numero de G's: 10
Numero de T's: 14

Numero de A's: 4
Numero de C's: 7
Numero de G's: 6
Numero de T's: 3

Secuencia: 2
Numero de A's: 19
Numero de C's: 18
Numero de G's: 10
Numero de T's: 13

Numero de A's: 8
Numero de C's: 13
Numero de G's: 2
Numero de T's: 3

Secuencia: 3
Numero de A's: 17
Numero de C's: 23
Numero de G's: 7
Numero de T's: 13

Numero de A's: 14
Numero de C's: 18
Numero de G's: 13
Numero de T's: 15

我想要:

Secuencia 0:
Número de A's: 14
Número de C's: 17
Número de G's: 24
Número de T's: 24

Secuencia 1:
Número de A's: 17
Número de C's: 30
Número de G's: 16
Número de T's: 17

Secuencia 2:
Número de A's: 27
Número de C's: 31
Número de G's: 12
Número de T's: 16

Secuencia 3:
Número de A's: 31
Número de C's: 41
Número de G's: 20
Número de T's: 28

2 个答案:

答案 0 :(得分:0)

您可以使用str.count()然后单独解析这些行。

答案 1 :(得分:0)

我只是使用字符串而不是文件,但理论上你只需打开文件并阅读内容:f = open('your_filename').read()

f = """>chr12_9180206_+:chr12_118582391_+:a1;2 total_counts: 115 Seed: 4 K: 20 length: 79
TTGGTTTCGTGGTTTTGCAAAGTATTGGCCTCCACCGCTATGTCTGGCTGGTTTACGA
GCAGGACAGGCCGCTAAAGTG
>chr12_9180206_+:chr12_118582391_+:a2;2 total_counts: 135 Seed: 4 K: 20 length: 80
CTAACCCCCTACTTCCCAGACAGCTGCTCGTACAGTTTGGGCACATAGTCATCCCACTCG
GCCTGGTAACACGTGCCAGC
>chr1_8969882_-:chr1_568670_-:a1;113 total_counts: 7600 Seed: 225 K: 20 length: 86
CACTCATGAGCTGTCCCCACATTAGGCTTAAAAACAGATGCAATTCCCGGACGTCTAAAC
CAAACCACTTTCACCGCCACACGACC
>chr1_8969882_-:chr1_568670_-:a2;69 total_counts: 6987 Seed: 197 K: 20 length: 120
TGAACCTACGACTACACCGACTACGGCGGACTAATCTTCAACTCCTACATACTTCCCCCA
TTATTCCTAGAACCAGGCGACCTGCGACTCCTTGACGTTGACAATCGAGTAGTACTCCCG"""

第一步是按换行分开:

lines = f.split('\n')

然后,只需收集计数,直到找到以'>chr'开头的行:

from collections import Counter
cnts = []
last = Counter()
for line in lines:
    if line.startswith('>chr'):
        if last:  # only do that for the second, third, etc.
            cnts.append(last)
            last = Counter()
    else:
        last = last + Counter(line)
cnts.append(last)  # also append the last counts

然后收集的计数是:

>>> print(cnts)
[Counter({'G': 24, 'T': 24, 'C': 17, 'A': 14}), 
 Counter({'C': 30, 'A': 17, 'T': 17, 'G': 16}), 
 Counter({'C': 31, 'A': 27, 'T': 16, 'G': 12}), 
 Counter({'C': 41, 'A': 31, 'T': 28, 'G': 20})]

其他一切只是格式化问题:

for seqno, cnt in enumerate(cnts):
    print('Secuencia {}:'.format(seqno))
    for amino in ('A', 'C', 'G', 'T'):
        print("Número de {}'s: {}".format(amino, cnt[amino]))

打印:

Secuencia 0:
Número de A's: 14
Número de C's: 17
Número de G's: 24
Número de T's: 24
Secuencia 1:
Número de A's: 17
Número de C's: 30
Número de G's: 16
Número de T's: 17
Secuencia 2:
Número de A's: 27
Número de C's: 31
Número de G's: 12
Número de T's: 16
Secuencia 3:
Número de A's: 31
Número de C's: 41
Número de G's: 20
Número de T's: 28