验证蛋白质序列

时间:2018-08-22 08:23:20

标签: python bioinformatics biopython

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

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

由于我想先验证序列,然后再保存到另一个文件中,因此编写此代码来测试验证方法。这种情况很少见,因为我习惯了不同的序列,其中包括非蛋白质字符“(”,但仍然给出了True的答案。

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

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 个答案:

答案 0 :(得分:2)

当您启动Seq或类似对象时,Biopython当前不提供字母验证(主要原因是性能成本较高)。围绕此问题进行了很多讨论,未来情况可能会发生变化。实际上,第一个Biopython增强建议(BEP)是关于在Biopython中使用字母。

无论如何,要暂时解决您的问题,Biopython中埋有一个_verify_alphabet函数,尽管它是“私有”的,但我认为没有理由不使用它:

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