如何计算由另一种线分隔的一组行中的字符数?

2024-10-01 15:45:10 发布

您现在位置:Python中文网/ 问答频道 /正文

我目前正在处理一个文本文件,其中有一个DNA提取序列(contigs)的列表,每个序列都有一个标题,后面是几行核苷酸,这是该序列的核苷酸长度。共有120个contigs,每个条目都用一行以“>;”开头来表示序列信息。在这条线之后,给出了该序列的核苷酸长度。在

示例:

>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:

  1. 找到以“>;”开头的行之后的行
  2. 数一数该序列行中的所有字符
  3. 将一个值返回到所有contig值的列表(一个列出每个contig长度的列表,即126、300、25…)
  4. 确保最后一个contig(没有“>;”表示结束)已计数。在

我想要一个整数的列表,这样我就可以计算出一些东西,比如平均长度,标准差,很酷的基因方程等等

我对编程比较陌生。如果我不清楚或需要进一步的信息,请告诉我。在


Tags: gtref信息列表序列small核苷酸xm
3条回答

谢谢你的帮助。我已经看过了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。再次感谢!在

这可能对您有用:它在包含>的行后面打印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)

不要重新发明轮子,按照马丁的建议使用生物制品。这里是一个开始,它将序列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

您可以将结果存储在字典中:

^{pr2}$

相关问题 更多 >

    热门问题