首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从fasta文件估计Biopython中的字母表

从fasta文件估计Biopython中的字母表
EN

Stack Overflow用户
提问于 2017-01-11 18:45:01
回答 1查看 295关注 0票数 4

我正在寻找一种方法来读取Biopython中的.fasta文件,并有包估计,如果我们是处理脱氧核糖核酸,核糖核酸或蛋白质。到目前为止,我像这样读取数据:

代码语言:javascript
复制
with open('file.fasta', 'r') as f:
    for seq in sio.parse(f, 'fasta'):
        # do stuff, depending on alphabet

我的问题是现在我不知道我将在.fasta文件中找到什么样的序列。它可以是蛋白质、DNA或RNA,但我必须知道字母表中的字母数。

有没有办法用Biopython从序列中“估计”字母表?我意识到一种蛋白质可能只包含字母ACGT,这就是为什么我想要估计字母表的原因。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-01-12 01:00:17

对于小的序列来说,这是非常困难的。例如,序列ACGCGACAGA可以是脱氧核糖核酸、核糖核酸或蛋白质序列,因为字母ACG对于所有三个字母都是通用的。在没有其他知识的情况下,不可能估计哪个是最佳匹配。

下面的代码将打印出给定FASTA文件中第一条记录所属的所有字母表:

代码语言:javascript
复制
from Bio import SeqIO
from Bio.Alphabet.IUPAC import *

alphabets = [extended_protein,  ambiguous_dna, unambiguous_dna, extended_dna, ambiguous_rna, unambiguous_rna]

def validate(seq, alphabet):
    "Checks that a sequence only contains values from an alphabet"
    # inspired by https://www.biostars.org/p/102/
    leftover = set(str(seq).upper()) - set(alphabet.letters)
    return not leftover

with open("example.fasta") as handle:
    first_record = list(SeqIO.parse(handle, "fasta"))[0]
    valid_alphabets = [str(alphabet) for alphabet in alphabets if validate(first_record.seq, alphabet)]
    print("Valid alpahabet(s) for fasta file: {}".format(', '.join(valid_alphabets)))

因此,对于序列ACGCGACAGA,将打印以下内容:

代码语言:javascript
复制
Valid alpahabet(s) for fasta file: ExtendedIUPACProtein(), IUPACAmbiguousDNA(), IUPACUnambiguousDNA(), ExtendedIUPACDNA(), IUPACAmbiguousRNA(), IUPACUnambiguousRNA()

但是对于序列MKQHKAMIVALIVICITAVVAALVTRKDLCEVHIRTGQTEVAVFX,它将打印:

代码语言:javascript
复制
Valid alpahabet(s) for fasta file: ExtendedIUPACProtein()
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41588725

复制
相关文章

相似问题

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