使用BioPython基于限制序列过滤FASTA文件

时间:2014-06-01 14:12:09

标签: python biopython fasta

我有一个fasta文件。从该文件中,我需要获得包含'CCNNNGG'的唯一序列(其中'N'表示随机核苷酸)并将它们放入新的fasta文件中。

示例(它应该输出第一个序列):

  

m121012_054644_42133_c100390582550000001523038311021245_s1_p0 / 7 / 3312_3597   CGCGGCATCGAATTAATACGACTCACTATAGGTTTTTTTATTG ********* CCTACGG *********** GTATTTTCAGTTAGATTCTTTCTTCTTAGAGGGTACAGAGAAAGGGAGAAAATAGCTACAGACATGGGAGTGAAAGGTAGGAAGAAGAGCGAAGCAGACATTATTCA

     

m121012_054644_42133_c100390582550000001523038311021245_s1_p0 / 7 / 3708_4657   CAACGGTTTTGCCACAAGATCAGGAACATAAGTCACCAGACTCAATTCATCCCCATAAGACCTCGGACCTCTCAATCCTCGAATTAGGATGTTCTCGTACGGTCTATCAGTATATAAACCTGACATACTATAAAAAAGTATACCAT   TCTTATCATGTACAGTAGGGTACAGTAGG

* s已添加以突出显示)

我的代码:

 from Bio import SeqIO 


    my_sequences = []
    for record in SeqIO.parse(open("example.fa", "rU"), "fasta") :
         if "CCTACGG" in record.seq :                #Works fine with CCTACGG

            my_sequences.append(record)



    output_handle = open("my_seqs.fasta", "w")
    SeqIO.write(my_sequences, output_handle, "fasta")
    output_handle.close()

我的问题是,我不知道如何编写随机核苷酸,而不是在"CCTACGG"之后写if我要'CCNNNGG' N'C'代表随机核苷酸('T''G''A'或{{1}})。

1 个答案:

答案 0 :(得分:2)

您可以使用正则表达式通过Python的re module

执行此操作
import re

pattern = 'CCNNNGG'
regex = re.compile(pattern.replace('N', '[ACGT]'))
for record in SeqIO.parse(...):
    if re.search(regex, record.seq) is not None:
        my_sequences.append(record)

这会将您的模式中的每个'N'替换为'[ACGT]',它将匹配这四个字符中的任何一个,然后在每个record.seq中搜索该模式。

另外,请注意您的示例不是很好 - 第二个也匹配该模式(它包含'CCCATGG') - 请参阅results