我在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
答案 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