DNA分析中使用正则表达式进行模式匹配时python中的For循环问题

2024-09-29 17:19:54 发布

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

我对Python相当陌生,我的for循环有一个问题,我似乎不太清楚。在

我试图读入FASTA文件,其中包含以下示例文本:

>seq1
AAACTACCGCGTTT
>seq2
AAACTGCAACTAGCGTTT
>seq3
AAACCGGAGTTACCTAGCGTTT

我想做的是读入我的文件并打印FASTA头文件(例如,header is>;seq1),然后我想匹配DNA序列中的两个唯一模式(例如“AAA”和“TTT”),并打印出这两个模式之间的DNA序列。在

所以我希望我的输出是这样的:

^{pr2}$

我有以下代码:

import re
def find_seq(filename):
    with open(filename) as file:
       seq=''
       for line in file:
            header = re.search(r'^>\w+', line)
            if(header):
                print (header.group())
                seq = seq.replace('\n','')
                find_Lpattern = re.sub(r'.*AAA', '',seq)
                find_Rpattern = re.sub(r'TTT.*', '',find_Lpattern)
                if(find_Rpattern):
                    print (find_Rpattern)
                    seq = ''
                else:
                    seq += line
filename = 'test.txt'
print(find_seq(filename))

我一直把这个作为我的输出:

>seq1
>seq2
CTACCGCG
>seq3
CTGCAACTAGCG

本质上,我的for循环跳过seq1,然后将DNA序列从seq1分配到seq2,并且在my for循环上的迭代是关闭的。有人能给我指出正确的方向吗?这样我就可以解决这个问题了?在


Tags: 文件reforline序列findfilenameseq
1条回答
网友
1楼 · 发布于 2024-09-29 17:19:54

即使假设你的缩进设置的方式能产生你描述的结果,你的逻辑是错的。在处理累积的seq之前,您正在打印页眉。在

当您读取文件的第1行时,headerregexp匹配。此时,seq是空字符串。因此,它打印匹配项,并对空字符串运行replace和re.sub调用。在

然后它读取第2行,“aaactacgcgttt”,并将其附加到seq。在

然后显示第3行,“>;seq2”。头与你的头匹配。然后in对seq运行replace和sub调用,这仍然是第2行中的“aaactacgcgttt”。在

在打印头之前,您需要将seq处理移动到,并考虑当您在没有找到最终头的情况下运行文件结尾时会发生什么-在for循环结束后,您仍将有要解析和打印的“seq”内容。在

或者看看第三方biopattern库,它有^{}模块来解析FASTA文件。在

相关问题 更多 >

    热门问题