首页 > 解决方案 > 验证蛋白质序列

问题描述

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

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

标签: pythonbioinformaticsbiopython

解决方案


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

无论如何,为了暂时解决您的问题,_verify_alphabetBiopython 中隐藏了一个函数,虽然它是“私有的”,但我认为没有理由不使用它:

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

推荐阅读