2

すぐに明らかになるように、私は Python とコーディング全般に不慣れです。テキスト ファイルとして保存されている遺伝子 ID のリストがあり、Entrez 関数を使用して GenBank データベースを検索し、ID に対応するタンパク質配列を取得したいと考えています。理想的には、この時点では配列のみに関心があるため、最終製品を FASTA ファイルにしたいと考えています。Biopython チュートリアル ( http://biopython.org/DIST/docs/tutorial/Tutorial.html#sec15 ) を使用して、私はこれを思いつきました:

from Bio import Entrez
from Bio import SeqIO
Entrez.email = "me@mysite.com"
id_list = set(open('test.txt', 'rU'))
handle = Entrez.efetch(db="protein", id=id_list, rettype="fasta", retmode="text")   
for seq_record in SeqIO.parse(handle, "fasta"):
    print ">" + seq_record.id, seq_record.description
print seq_record.seq
handle.close()

しかし、実行すると、次のエラーが表示されます。

File "C:/Python27/Scripts/entrez_files.py", line 5, in <module>
  handle = Entrez.efetch(db="protein", id=id_list, rettype="fasta", retmode="text")
File "C:\Python27\lib\site-packages\Bio\Entrez\__init__.py", line 145, in efetch
  if ids.count(",") >= 200:
AttributeError: 'set' object has no attribute 'count'

rettype = 'fasta' を使用するたびに同様のエラーが発生します。rettype = 'gb' を使用すると、このエラーは発生しませんが、実際には fasta ファイルで終了したいと考えています。誰か提案はありますか?ありがとうございました!

編集:申し訳ありませんが、入力ファイルがどのようなものかを含めることを怠りました。完璧な世界では、コードは次のような入力形式を受け入れます。

gi|285016822|ref|YP_003374533.1|
gi|285018887|ref|YP_003376598.1|
gi|285016823|ref|YP_003374534.1|
gi|285016824|ref|YP_003374535.1| 
....

しかし、次のような遺伝子 ID (GI) のみの簡略化されたバージョンも使用してみました。

285016822 
285018887 
285016823
285016824...
4

1 に答える 1

1

efetch のソース コードでわかるように、idパラメーターにはcountメソッドが必要です。通常、これは単一の ID を持つ文字列か、すべての ID を持つ Python リストになります。おそらく繰り返される値を排除するためにを使用しているsetため、次のようなリストに変換できます。

id_list = set(open('test.txt', 'rU'))
id_list = list(id_list) 
于 2013-12-30T22:30:00.553 に答える