我对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循环上的迭代是关闭的。有人能给我指出正确的方向吗?这样我就可以解决这个问题了?在
即使假设你的缩进设置的方式能产生你描述的结果,你的逻辑是错的。在处理累积的
seq
之前,您正在打印页眉。在当您读取文件的第1行时,
header
regexp匹配。此时,seq
是空字符串。因此,它打印匹配项,并对空字符串运行replace和re.sub
调用。在然后它读取第2行,“aaactacgcgttt”,并将其附加到
seq
。在然后显示第3行,“>;seq2”。头与你的头匹配。然后in对
seq
运行replace和sub调用,这仍然是第2行中的“aaactacgcgttt”。在在打印头之前,您需要将
seq
处理移动到,并考虑当您在没有找到最终头的情况下运行文件结尾时会发生什么-在for循环结束后,您仍将有要解析和打印的“seq”内容。在或者看看第三方biopattern库,它有^{} 模块来解析FASTA文件。在
相关问题 更多 >
编程相关推荐