代码之家  ›  专栏  ›  技术社区  ›  Xiong89

Python:如何根据序列基而不是它们的头名来去掉序列?

  •  -1
  • Xiong89  · 技术社区  · 10 年前

    我想根据序列成分来推断两个文件,而不是使用头名称来去除序列。我还有其他方法可以推断序列吗?有人能帮我吗?如果下面的fasta标头被替换为>那么下面的代码将无法运行。

    密码

    from Bio import SeqIO
    
    input_file = 'a.fasta'
    merge_file = 'original.fasta'
    output_file = 'results.fasta'
    exclude = set()
    fasta_sequences = SeqIO.parse(open(input_file),'fasta')
    for fasta in fasta_sequences:
        exclude.add(fasta.id)
    
    fasta_sequences = SeqIO.parse(open(merge_file),'fasta')
    with open(output_file, 'w') as output_handle:
       for fasta in fasta_sequences:
            if fasta.id not in exclude:
                SeqIO.write([fasta], output_handle, "fasta")
    

    a、 法斯塔

    >chr12:15747942-15747949
    TGACATCA
    >chr2:130918058-130918065
    TGACCTCA
    

    原始.fasta

    >chr3:99679938-99679945
    TGACGTAA
    >chr9:135822160-135822167
    TGACCTCA
    >chr12:15747942-15747949
    TGACATCA
    >chr2:130918058-130918065
    TGACCTCA
    >chr2:38430457-38430464
    TGACCTCA
    >chr1:112381724-112381731
    TGACATCA
    

    结果.fasta

    >chr3:99679938-99679945
    TGACGTAA
    >chr9:135822160-135822167
    TGACCTCA
    >chr2:38430457-38430464
    TGACCTCA
    >chr1:112381724-112381731
    TGACATCA
    
    1 回复  |  直到 10 年前
        1
  •  2
  •   Kevin    10 年前

    你可以互相检查序列。但是要小心,序列可能不是100%匹配的,需要这样才能得到所需的结果。使用访问序列 str(your_obj.seq) .

    在代码中,在此处实现更改:

    for fasta in fasta_sequences:
        exclude.add(str(fasta.seq))
    

    这里:

    for fasta in fasta_sequences:
            if str(fasta.seq) not in exclude:
    

    在您的示例中,您应该注意到 results.fasta 文件将只包含以下行,因为它是 original.fasta 与来自的序列不匹配 a.fasta .

    >chr3:99679938-99679945
    TGACGTAA
    
    推荐文章