我目前正在处理一个文本文件,其中包含一系列DNA提取序列(重叠群),每个序列都有一个标题,后面是核苷酸系,这是该重叠群的核苷酸长度。有120个重叠群,每个条目都标有一行以">"开头。表示序列信息。在该行之后,给出该序列的一段核苷酸。
示例:
>gi|571136972|ref|XM_006625214.1| Plasmodium chabaudi chabaudi small subunit ribosomal protein 5 (Rps5) (rps5) mRNA, complete cds
ATGAGAAATATTTTATTAAAGAAAAAATTATATAATAGTAAAAATATTTATATTTTATATTATATTTTAATAATATTTAAAAGTATTTTTATTATTTTATTTAATAGTAAATATAATGTGAATTATTATTTATATAATAAAATTTATAATTTATTTATTATATATATAAAATTATATTATATTATAAATAATATATATTATAATAATAATTATTATTATATATATAATATGAATTATATA
TATTTTTATATTTATAAATATAATAGTTTAAATAATA
>gi|571136996|ref|XM_006625226.1| Plasmodium chabaudi chabaudi small subunit ribosomal protein 2 (Rps2) (rps2) mRNA, complete cds
ATGTTTATTACATTTAAAGATTTATTAAAATCTAAAATATATATAGGAAATAATTATAAAAATATTTATATTAATAATTATAAATTTATATATAAAATAAAATATAATTATTGTATTTTAAATTTTACATTAATTATATTATATTTATATAAATTATATTTATATATTTATAATATATCTATATTTAATAATAAAATTTTATTTATTATTAATAATAATTTAATTACAAATTTAATTATT
AATATATGTAATTTAACTAATAATTTTTATATTATTA
我想做的是列出每个重叠群。我的问题是,我不知道告诉Python所需的语法:
我想要一个整数列表,这样我就可以计算出重叠群的平均长度,标准差,冷基因方程等等。
我对编程比较陌生。如果我不清楚或需要进一步的信息,请告诉我。
答案 0 :(得分:3)
不要重新发明轮子,使用马丁建议的biopython。这是一个开始,将序列ID和长度打印到终端。您可以使用pip安装biopython,即pip install biopython
from Bio import SeqIO
import sys
FileIn = sys.argv[1]
handle = open(FileIn, 'rU')
SeqRecords = SeqIO.parse(handle, 'fasta')
for record in SeqRecords: #loop through each fasta entry
length = len(record.seq) #get sequence length
print "%s: %i bp" % (record.id, length) #print sequence ID: seq length
或者您可以将结果存储在字典中:
handle = open(FileIn, 'rU')
sequence_lengths = {}
SeqRecords = SeqIO.parse(handle, 'fasta')
for record in SeqRecords: #loop through each fasta entry
length = len(record.seq) #get sequence length
sequence_lengths[record.id] = length
#access dictionary outside of loop
print sequence_lengths
答案 1 :(得分:0)
这可能适合您:它会在包含>
的行后面的行中打印ACGT的数量:
import re
with open("input.txt") as input_file:
data = input_file.read()
data = re.split(r">.*", data)[1:]
data = [sum(1 for ch in datum if ch in 'ACGT') for datum in data]
print(data)
答案 2 :(得分:0)
感谢所有帮助。我已经看过了biopython的东西,很高兴能够理解并融入它。这个任务的总体目标是教我如何理解python,而不是直接找到解决方案,或者至少如果我找到解决方案,我必须能够用我自己的话来解释它。
无论如何,我已经创建了一个包含该元素以及其他元素的代码。我还有一些事要做,如果我感到困惑,我会回来问。
这是我的第一个工作代码,直接与我的主管或我制作和理解的教程一起工作(喔!):
import re
with open("COPYFORTESTINGplastid.1.rna.fna") as fasta:
contigs = 0
for line in fasta:
if line.strip().startswith('>'):
contigs = contigs + 1
with open("COPYFORTESTINGplastid.1.rna.fna") as fasta:
data = fasta.read()
data = re.split(r">.*", data)[1:]
data = [sum(1 for ch in datum if ch in 'ACGT') for datum in data]
print "Total number of contigs: %s" %contigs
total_contigs = sum(data)
N50 = sum(data)/2
print "number used to determine N50 = %s" %N50
average = 0
total = 0
for n in data:
total = total + n
mean = total / len(data)
print "mean length of contigs: %s" %mean
print "total nucleotides in fasta = %s" %total_contigs
#print "list of contigs by length: %s" %sorted([data])
l = data
l.sort(reverse = True)
print "list of contigs by length: %s" %l
这就是我想要的,但如果您有任何意见或建议,我很乐意听到。
接下来,用这个甜蜜的甜蜜名单来确定N50。再次感谢!
答案 3 :(得分:0)
我创建了一个计算N50的函数,它看起来工作得很好。我可以解析命令行并通过程序运行任何.fa文件
def calc_n50(array):
array.sort(reverse = True)
n50 = 0 #sums lengths
n = 0 #n50 sequence
half = sum(array)/2
for val in array:
n50 += val
if n50 >= half:
n = val
break #breaks loop when condition is met
print "N50 is",n