Skip to main content
 首页 » 编程设计

python之如何使用特定步长的窗口提取短序列

2025年05月04日45zhujiabin

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

请您参考如下方法:

对于任何窗口大小和任何步长:

fasta='ACCCGATTT' 
windowSize=4 
step=1 
i=0 
while (i+windowSize)<=len(fasta): 
    currentWindow=fasta[i:i+windowSize] 
    print(currentWindow) 
    i+=step 

windowSize=4,step=2 的输出:

ACCC  
CCGA                        
GATT  

windowSize=4,step=1 的输出:

ACCC                        
CCCG 
CCGA 
CGAT 
GATT 
ATTT 

最后一个与“预期输出”完全相同,排序不同。