在某些情况下,我的序列字符与蛋白质不符。
>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'
答案 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