1

私は以下のようにフォーマットされた約145000エントリの.fastaファイル(本質的に.txt)を持っています

>gi|393182|gb|AAA40101.1| cytokine [Mus musculus]
MDAKVVAVLALVLAALCISDGKPVSLSYRCPCRFFESHIARANVKHLKILNTPNCALQIVARLKNNNRQV
CIDPKLKWIQEYLEKALNKRLKM

>gi|378792467|pdb|3UNH|Y Chain Y, Mouse 20s Immunoproteasome
TTTLAFKFQHGVIVAVDSRATAGSYISSLRMNKVIEINPYLLGTMSGCAADCQYWERLLAKECRLYYLRN
GERISVSAASKLLSNMMLQYRGMGLSMGSMICGWDKKGPGLYYVDDNGTRLSGQMFSTGSGNTYAYGVMD
SGYRQDLSPEEAYDLGRRAIAYATHRDNYSGGVVNMYHMKEDGWVKVESSDVSDLLYKYGEAAL

>gi|378792462|pdb|3UNH|T Chain T, Mouse 20s Immunoproteasome
MSSIGTGYDLSASTFSPDGRVFQVEYAMKAVENSSTAIGIRCKDGVVFGVEKLVLSKLYEEGSNKRLFNV
DRHVGMAVAGLLADARSLADIAREEASNFRSNFGYNIPLKHLADRVAMYVHAYTLYSAVRPFGCSFMLGS
YSANDGAQLYMIDPSGVSYGYWGCAIGKARQAAKTEIEKLQMKEMTCRDVVKEVAKIIYIVHDEVKDKAF
ELELSWVGELTKGRHEIVPKDIREEAEKYAKESLKEEDESDDDNM
  1. 私はgiのリストを持っています(|の後にリストされている最初の番号)。
  2. このリストのサイズは、特定のテストで60〜600giの間で変化します
  3. それらのギのそれぞれの種のリストを返したい
  4. 種名は通常、最初の例(角かっこ[Mus musculus]で囲まれています)のように表示されますが、常に存在するとは限りません。
  5. 順序は特に重要ではありません。

私はさまざまなBioPython解析ビットを使用してきましたが、検索のサイズが原因で失敗すると思います。私はここの誰かがもっと効率的な方法を知っていることを望んでいましたか?

前もって感謝します!

4

3 に答える 3

5

種の完全に一貫性のない FASTA ヘッダー行を解析するのではなく、GI 番号を抽出してから NCBI 分類 ID を調べることができます。たとえば、 http: //lists.open-bio.org/pipermail/biopython/2009- June/005304.html -種名、共通名、系統などは、タクシーから入手できます。 、Entrez Utilities (EUtils) も別のオプションです。

于 2012-04-04T11:51:15.203 に答える
1

試してみるデータがない場合は、必要なセットをロードするのが最も簡単な方法だと思いgiます。次に、最小限の処理でfastaファイルを読み取り、行内のを抽出します。gi次に、giが目的のセットに含まれている場合は、最後に|区切られたフィールドを抽出します。

例えば:

# assuming gi list is in a file, one per line
with open('lookup_list.txt','r') as f:
  wanted = set(x.strip() for x in f)

with open('data.fasta','r') as f:
  for line in f:
    if line and line[0] == '>':
      gi = line[4:line.find('|',4)]
      if gi in wanted:
        text = line[line.rfind('|')+1:] # Now process the text to extract species
        print text

説明フィールドから種名を抽出する方法は、検索するさまざまな形式によって異なります。

于 2012-04-04T11:21:10.560 に答える
1

本当に、本当にナイーブなアプローチ

with open('my.fasta') as fd:
    for line in fd:
        if line.startswith('>'):
            if '[' in line:
                gi=line.split('|')[1]
                name=line.split('[')[-1]
                print gi, name[:-2]

上記の場合、出力は次のとおりです。

393182 Mus musculus
于 2012-04-04T11:29:10.170 に答える