繁体   English   中英

对于python中的循环问题,同时在DNA分析中使用正则表达式进行模式匹配

[英]For loop issue in python while using regex for pattern matching in DNA analysis

我对Python很新,我的for循环有一个问题,我似乎无法弄明白。

我正在尝试读入具有以下示例文本的FASTA文件:

>seq1
AAACTACCGCGTTT
>seq2
AAACTGCAACTAGCGTTT
>seq3
AAACCGGAGTTACCTAGCGTTT

我想要做的是读入我的文件并打印FASTA标题(例如标题> seq1),然后我想匹配DNA序列中存在的两个独特模式(例如“AAA”和“TTT”)和打印这两种模式之间的DNA序列。

所以我希望我的输出看起来像这样:

>seq1
CTACCGCG
>seq2
CTGCAACTAGCG
>seq3
CCGGAGTTACCTAGCG

我有以下代码:

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,然后将seq1的DNA序列分配给seq2,并且我的for循环的迭代关闭。 有谁能指出我正确的方向,所以我可以解决这个问题?

即使假设您的缩进设置的方式会产生您描述的结果,您的逻辑也会关闭。 您在处理累积的seq之前打印标题。

当您阅读文件的第1行时, header表达式匹配。 此时, seq是空字符串。 因此,它打印匹配,并在空字符串上运行replace和re.sub调用。

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

然后它读取第3行“> seq2”。 这与您的标头正则表达式匹配,因此它会打印标题。 然后在seq上运行你的替换和子调用 - 这仍然是第2行的“AAACTACCGCGTTT”。

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

或者可以查看第三方biopattern库,它有SeqIO模块来解析FASTA文件。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM