首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >验证蛋白质序列

验证蛋白质序列
EN

Stack Overflow用户
提问于 2018-08-22 08:23:20
回答 2查看 794关注 0票数 2

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

代码语言:javascript
复制
>ISAnsp8_orf1
MRKSRFTEEQIAHALRQVDAGVPAAELCRKLGISEQTFYAWKKKYAGMGIAEMRRVKQLEDENRRLKTLVADLTLDKHMLQEVLRKKF
>IS3_orf1
UGAAGAGCUGGCUAUCCUCCAAAAGGCCGCGACAUACUUCGCGAAGCGCC
>IS3_orf2
..............................(((((((((((......[[[
>IS3_orf3
UGAAAUGAAGUAUGUCUUUAUUGAAAAACAUCAGGCUGAGUUCAGCAUCA
>IS3_orf4
[[[..)))))))))))..............]]]]]]
>IS3_orf5
AAGCAAUGUGCCGCGUGCUCCGGGUGGCCCGCA
>IS3_orf7
MTKTVSTSKKPRKQHSPEFRSEALKLAERIGVTAAARELSLYESQLYNWRSKQQNQQTSSERELEMSTEIARLKRQLAERDEELAILQKAATYFAKRLK

因为我想验证之前的序列以保存在另一个文件中,所以我编写了这个代码来测试验证方法。这是罕见的,因为我习惯了不同的序列,其中包括非蛋白字符(但它仍然给我的答案是真实的。)

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

代码语言:javascript
复制
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'
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-08-22 14:23:59

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

无论如何,为了解决目前的问题,Biopython中隐藏了一个_verify_alphabet函数,尽管它是“私有的”,但我认为没有理由不使用它:

代码语言:javascript
复制
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))

输出(在Python3.6中,Bio版本1.73dev):

代码语言:javascript
复制
TGEKPYVCQECGKAFNCSSYLSKHQR True
((((((((((( False
票数 4
EN

Stack Overflow用户

发布于 2022-09-14 15:46:50

显然Biopython删除了Bio.Alphabet

https://www.biostars.org/p/102/复制

您可以使用:

代码语言:javascript
复制
import re

def validate(seq, alphabet='dna'):
    
    alphabets = {'dna': re.compile('^[acgtn]*$', re.I), 
             'protein': re.compile('^[acdefghiklmnpqrstvwy]*$', re.I)}


    if alphabets[alphabet].search(seq) is not None:
         return True
    else:
         return False


sequences = ['TGEKPYVCQECGKAFNCSSYLSKHQR', '(((((((((((']

for sequence in sequences:
    
    print(validate(sequence, 'protein'))

产出:

代码语言:javascript
复制
True
False
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51962651

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档