変なタイトルでごめんなさい。
eSearch と eSummary を使用して移動しています
アクセッション番号 --> gID --> TaxID
「accessions」が 20 の登録番号のリストであると仮定します (NCBI が許可する最大値であるため、一度に 20 とします)。
そうです:
handle = Entrez.esearch(db="nucleotide", rettype="xml", term=accessions)
record = Entrez.read(handle)
gids = ",".join(record[u'IdList'])
これにより、これらの 20 のアクセッション番号から 20 の対応する GID が得られます。
に続く:
handle = Entrez.esummary(db="nucleotide", id=gids)
record = Entrez.read(handle)
gids の GID の 1 つが NCBI から削除されているため、このエラーが発生します。
File ".../biopython-1.52/build/lib.macosx-10.6-universal-2.6/Bio/Entrez/Parser.py", line 191, in endElement value = IntegerElement(value)
ValueError: invalid literal for int() with base 10: ''
私は試すことができます:, except: それ以外は、問題のない他の 19 個の GID をスキップします。
私の質問は:
Entrez.read を使用して一度に 20 レコードを読み取り、他の 20 レコードを犠牲にすることなく、欠落しているレコードをスキップするにはどうすればよいですか? 一度に 1 つずつ実行できますが、それは信じられないほど遅くなります (私は 300,000 のアクセッション番号を持っており、NCBI では 1 秒あたり 3 つのクエリしか実行できませんが、実際には 1 秒あたり 1 つのクエリのようです)。