给定一个FASTA文本文件(Rosalind_gc.txt),我应该检查每个DNA记录并确定鸟嘌呤胞嘧啶(GC)含量的百分比(%)。
这方面的示例如下:
样本数据集:
>Rosalind_6404
CCTGCGGAAGATCGGCACTAGAATAGCCAGAACCGTTTCTCTGAGGCTTCCGGCCTTCCC
TCCCACTAATAATTCTGAGG
>Rosalind_5959
CCATCGGTAGCGCATCCTTAGTCCAATTAAGTCCCTATCCAGGCGCTCCGCCGAAGGTCT
ATATCCATTTGTCAGCAGACACGC
>Rosalind_0808
CCACCCTCGTGGTATGGCTAGGCATTCAGGAACCGGAGAACGCTTCAGACCAGCCCGGAC
TGGGAACCTGCGGGCAGTAGGTGGAAT示例输出:
Rosalind_0808 60.919540
所以基本上遍历每个字符串,计算G/C出现的时间的amt,然后将总数除以每个字符串的长度。我的问题是学习如何识别代码中的中断(即>Rosalind_6404 )。我想要一个不使用Biopython的代码示例,也可以使用biopython方法。
发布于 2019-05-31 05:33:04
您可以逐行读取文件,并将序列数据累积到以">“开头的下一行(文件末尾再加一次)
def getCount(seq):
return seq.count("G")+seq.count("C")
with open("input.txt","r") as file:
sequence = ""
name = ""
for line in file:
line = line.strip()
if not line.startswith(">"):
sequence += line
continue
if name != "":
print(name, 100*getCount(sequence)/len(sequence))
name = line[1:]
sequence = ""
print(name, 100*getCount(sequence)/len(sequence))
# Rosalind_6404 53.75
# Rosalind_5959 53.57142857142857
# Rosalind_0808 60.91954022988506发布于 2019-05-31 19:45:07
既然您正在寻找一个Biopython解决方案,下面是一个非常简单的解决方案:
from Bio import SeqIO
from Bio.SeqUtils import GC
for r in SeqIO.parse('Rosalind_gc.fa', 'fasta'):
print(r.id, GC(r.seq))输出:
Rosalind_6404 53.75
Rosalind_5959 53.57142857142857
Rosalind_0808 60.91954022988506发布于 2019-05-31 05:35:26
您可能希望尽可能多地使用预编译的C模块来解决性能问题。有一个使用正则表达式的解决方案:
seq = 'CCTGCGGAAGATCGGCACTAGAATAGCCAGAACCGTTTCTCTGAGGCTTCCGGCCTTCCCTCCCACTAATAATTCTGAGG'
import re
perc = re.subn(r'[GC]', '', seq) / len(seq)还可以处理">“行:
seq = []
name = ''
for line in open('Rosalind_gc.txt'):
if not line.startswith('>'):
seq.append(line.strip())
else:
if seq:
seq = ''.join(seq)
perc = re.subn(r'[GC]', '', seq) / len(seq)
print('{} has GC percent: {}'.format(name, perc * 100))
seq = []
name = line.strip()https://stackoverflow.com/questions/56381396
复制相似问题