验证蛋白质序列
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
在某些情况下,我的序列中的字符与蛋白质不对应。
>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