[英]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.