首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何让Python读取文本的特定部分并使其停在我想要的位置

如何让Python读取文本的特定部分并使其停在我想要的位置
EN

Stack Overflow用户
提问于 2019-04-03 03:31:03
回答 6查看 88关注 0票数 0

所以我有一个家庭作业的问题,我需要在某些部分计算每个字母的字符。示例文件:

代码语言:javascript
复制
>Rosalind_4451
TGTGCTGAGAATTTGCACCACTCCCGTGTCGATGGTATGAGGGAACTGGTTGTAGAACTG
CGACATTACTTTCTGAGACGCAAGGCGTACAGCCAAATGTGAAGTACAAACCAAGAAGTT
CGGGCCGGTCGTTAAGTATCCCGCATACCACACCTTGAATGGAACCCGTCGGGCCCGGGT
TTTTTAAGGGGTTTAACACACCAGACTAAGGCGTTTTCTGACTTGGAGTCGAGTCGATGG
GATGTACCTATCGAAAGAGGTACTCTATATTTGTACCGTGCAG
>Rosalind_6341
CGACAGGCTCTTTAAATTGCGAAGTGTGCCATCCTACCGCATATGCCTAGCCTAATCTTG
AGCTCGAAACCGGAAATGGAAGCACACCAATGTCTCTCCGAGCTACTGTCCATCTACGTC
ATTGCTGACGTCATATGGGCATTAGTTCCTAATCGTGATAGCGAAGGCGGTTGCGTATAC
GGCTGGTGTGTTCGGGCCAATAACGTAGAAGTATCAACATGACAGCCGTCGTGGGGAACC

如何让Python计算4451节和6341节中的字符?文件每次都不同,所以我不能手动让它用字母来计算行数

另外,下面是我的代码

代码语言:javascript
复制
txt = open (input ())
lines = txt.readlines ()

for lines in txt:
if lines == ">Rosalind_9690":
#fin = txt.seek(">Rosalind_9690")
#data1= fin.readlines("Rosalind_4299" to "Rosalind_9690")
    a = lines.count("A")
    g = lines.count("G")
    c = lines.count("C")
    t = lines.count("T")
    float (a)
    float (g)
    float (c)
    float (t)

CG_con = (g+c)/(a+g+c+t)
print (CG_con)
EN

回答 6

Stack Overflow用户

发布于 2019-04-03 04:35:27

字典可以用来保存id和base。如果您事先知道想要的id,您可以遍历字典(通过想要的id)并计算每个id的基数

您可以使用集合中的Counter对每个序列的碱基进行计数。

代码语言:javascript
复制
from collections import Counter

d = {} # dictionary to hold fasta data

file = input('Filename: ')

with open(file, 'r') as fasta:
    for line in fasta:
        line = line.rstrip()
        if line.startswith('>'):
            id = line
            d[id] = ''
        else:
            d[id] += line

wanted = ['>Rosalind_4451', '>Rosalind_6341']

for id in wanted:
    print(id)
    seen = Counter(d[id])
    CG_com = (seen.get('G', 0) + seen.get('C', 0)) / sum(seen.values())
    print(format(CG_com, '.4f'))

对于您的数据,我收到的输出是:

代码语言:javascript
复制
>Rosalind_4451
0.4912
>Rosalind_6341
0.5042
票数 1
EN

Stack Overflow用户

发布于 2019-04-03 03:38:57

您可以使用import rere.split来拆分不同的部分,假设它们遵循相同的格式,然后在每个部分上使用.count()

票数 0
EN

Stack Overflow用户

发布于 2019-04-03 03:55:36

尝试使用以下正则表达式来确定该行是否包含节标题(或者在我们的示例中将其称为分隔符):

'>\w+\_\d+\n‘

这将传递给>Rosalind_4451和>Rosalind_6341格式的分隔符以及类似的分隔符。

当您在一行中找到匹配项时,将所有字母表的计数重新初始化为0。希望这能有所帮助。

附注:确保使用以下语句导入正则表达式。

代码语言:javascript
复制
import re
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55482235

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档