在某些情况下,我的序列中的字符与蛋白质不对应。
>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'
最佳答案
Biopython 目前在启动 Seq
或类似对象时不提供字母验证(主要原因是性能成本较高)。围绕这一点有很多讨论, future 情况可能会发生变化;事实上,第一个 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))
输出(在带有 Bio 版本 1.73dev 的 Python 3.6 中):
TGEKPYVCQECGKAFNCSSYLSKHQR True
((((((((((( False
关于python - 验证蛋白质序列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51962651/