代码之家  ›  专栏  ›  技术社区  ›  F.Lira

验证蛋白质序列

  •  1
  • F.Lira  · 技术社区  · 6 年前

    在某些情况下,我的序列具有与蛋白质不对应的特征。

    >ISAnsp8_orf1
    MRKSRFTEEQIAHALRQVDAGVPAAELCRKLGISEQTFYAWKKKYAGMGIAEMRRVKQLEDENRRLKTLVADLTLDKHMLQEVLRKKF
    >IS3_orf1
    UGAAGAGCUGGCUAUCCUCCAAAAGGCCGCGACAUACUUCGCGAAGCGCC
    >IS3_orf2
    ..............................(((((((((((......[[[
    >IS3_orf3
    UGAAAUGAAGUAUGUCUUUAUUGAAAAACAUCAGGCUGAGUUCAGCAUCA
    >IS3_orf4
    [[[..)))))))))))..............]]]]]]
    >IS3_orf5
    AAGCAAUGUGCCGCGUGCUCCGGGUGGCCCGCA
    >IS3_orf7
    MTKTVSTSKKPRKQHSPEFRSEALKLAERIGVTAAARELSLYESQLYNWRSKQQNQQTSSERELEMSTEIARLKRQLAERDEELAILQKAATYFAKRLK
    

    测试所有三种可能性以“排序”答案相同(错误)

    import sys
    from Bio.Seq import Seq
    from Bio.Alphabet import IUPAC, ProteinAlphabet
    
    sequence = sys.argv[1]
    #sequence = '((((((((((('
    #sequence = 'TGEKPYVCQECGKAFNCSSYLSKHQR'
    
    my_prot = Seq(sequence, alphabet=IUPAC.IUPACProtein)
    
    print isinstance(my_prot.alphabet, ProteinAlphabet)     
    
    if isinstance(my_prot.alphabet, ProteinAlphabet) == True:
      print 'ok' , isinstance(my_prot.alphabet, ProteinAlphabet)
    else:
      print 'no'
    
    1 回复  |  直到 6 年前
        1
  •  2
  •   Chris_Rands    6 年前

    当您启动一个 Seq 或类似对象(主要原因是性能成本高)。围绕这一点有很多讨论,未来情况可能会发生变化;事实上,第一个Biopython增强建议(BEP)是关于在Biopython中使用字母。

    不管怎样,现在要解决你的问题,有一个 _verify_alphabet Biopython中隐藏的函数,虽然它是“私有的”,但我认为没有理由不使用它:

    from Bio.Seq import Seq
    from Bio.Alphabet import IUPAC, _verify_alphabet
    
    sequences = ['TGEKPYVCQECGKAFNCSSYLSKHQR', '(((((((((((']
    
    for sequence in sequences:
        my_prot = Seq(sequence, IUPAC.protein)
        print(my_prot, _verify_alphabet(my_prot))
    

    输出(在Bio版本为1.73dev的Python 3.6中):

    TGEKPYVCQECGKAFNCSSYLSKHQR True
    ((((((((((( False