验证蛋白质序列

Validate protein sequence

在某些情况下,我的序列中的字符与蛋白质不对应。

>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'

当您启动一个 Seq 或类似的对象时,Biopython 目前不提供字母表验证(主要原因是性能开销大)。围绕这个有很多讨论,未来情况可能会改变;事实上,第一个 Biopython 增强提案 (BEP) 是关于字母表在 Biopython 中的使用。

无论如何,为了暂时解决你的问题,Biopython 中隐藏了一个 _verify_alphabet 函数,虽然它是 'private',但我认为没有理由不使用它:

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))

输出(在 Python 3.6 和 Bio 版本 1.73dev):

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