下面的代码在窗口大小为4的每个序列中提取短序列。如何将窗口移位2步长并提取4个碱基对?

范例程式码

from Bio import SeqIO

with open("testA_out.fasta","w") as f:
        for seq_record in SeqIO.parse("testA.fasta", "fasta"):
            i = 0
            while ((i+4) < len(seq_record.seq)) :
              f.write(">" + str(seq_record.id) + "\n")
              f.write(str(seq_record.seq[i:i+4]) + "\n")
              i += 2


testA.fasta的示例输入

>human1
ACCCGATTT


testA_out的示例输出

>human1
ACCC
>human1
CCGA
>human1
GATT


此输出的问题是遗漏了一个T,因此在这种情况下,我希望也将其包括在内。我怎么能得到这个输出?反向提取也包括从开始到结束提取时可能被忽略的碱基对。谁能帮我?

预期产量

>human1
ACCC
>human1
CCGA
>human1
GATT
>human1
ATTT
>human1
CGAT
>human1
CCCG

最佳答案

您可以对for使用range循环,并为step使用第三个range参数。这样,它比使用while循环更干净。如果无法将数据除以块大小,则最后一个块会更小。

data = "ACCCGATTT"
step = 2
chunk = 4
for i in range(0, len(data) - step, step):
    print(data[i:i+chunk])


输出是

ACCC
CCGA
GATT
TTT

10-08 01:00