下面的代码在窗口大小为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