3

変なタイトルでごめんなさい。

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 つのクエリのようです)。

4

2 に答える 2

0

Parser.py を見て、何が解析されているかを確認します。NCBI から結果を取得しているように見えますが、1 つのレコードの形式がパーサーをつまずかせています。

パーサーをサブクラス化/モンキーパッチして、例外を乗り越えることができる場合があります。

于 2009-10-06T04:24:01.947 に答える