2

Biopython のEntrez.fetch()関数を使用して、遺伝子 ID (GI) 番号を介して NCBI からタンパク質配列を取得しようとしています。

proteina = Entrez.efetch(db="protein", id= gi, rettype="gb", retmode="xml").

次に、次を使用してデータを読み取ります。

proteinaXML = Entrez.read(proteina).

結果を印刷できますが、タンパク質配列だけを取得する方法がわかりません。

結果が表示されたら、手動でタンパク質に到達できます。または、II を使用して XML ツリーを確認します。

proteinaXML[0]["GBSeq_feature-table"][2]["GBFeature_quals"][6]['GBQualifier_value'].

ただし、提出されたタンパク質の GI によっては、XML ツリーが異なる場合があります。このプロセスを確実に自動化することが難しくなります。

私の質問: XML ツリー全体ではなく、タンパク質配列のみを取得することは可能ですか? あるいは、XML ファイルの構造がタンパク質ごとに異なる可能性があることを考えると、XML ファイルからタンパク質配列を抽出するにはどうすればよいでしょうか?

ありがとう

4

1 に答える 1

2

良い点として、XML のデータベース エントリは、さまざまな著者によって提出されたタンパク質によって異なります。

XML ツリーからタンパク質配列を「探す」アルゴリズムを作成しました。

import os
import sys
from Bio import Entrez
from Bio import SeqIO

gi          = '1293613'         # example gene id                   
Entrez.email= "you@email.com"   # Always tell NCBI who you are
protina     = Entrez.efetch(db="protein", id=gi, retmode="xml") # fetch the xml
protinaXML  = Entrez.read(protina)[0]

seqs = []           # store candidate protein seqs
def seqScan(xml):   # recursively collect protein seqs
    if str(type(xml))=="<class 'Bio.Entrez.Parser.ListElement'>":
        for ele in xml:
            seqScan(ele)
    elif str(type(xml))=="<class 'Bio.Entrez.Parser.DictionaryElement'>":
        for key in xml.keys():
            seqScan(xml[key])
    elif str(type(xml))=="<class 'Bio.Entrez.Parser.StringElement'>":
        #   v___THIS IS THE KEYWORD FILTER_____v
        if (xml.startswith('M') and len(xml))>10: # 1) all proteins start with M (methionine)
            seqs.append(xml)                      # 2) filters out authors starting with M

seqScan(protinaXML) # run the recursive sequence collection
print(seqs)         # print the goods!

注: まれに (「キーワード フィルター」によっては)、省略名が 10 文字を超える、「M」で始まる著者名などの不要な文字列をユーモラスに取得することがあります (下の図)。

ここに画像の説明を入力

それが役立つことを願っています!

于 2013-11-25T17:52:11.687 に答える