Извините за нечетное название.
Я использую eSearch & eSummary для перехода с
Номер доступа -> gID -> TaxID
Предположим, что 'accessions' - это список из 20 номеров доступа (я делаю 20 одновременно, потому что это максимум, который допускается NCBI).
Я делаю:
handle = Entrez.esearch(db="nucleotide", rettype="xml", term=accessions)
record = Entrez.read(handle)
gids = ",".join(record[u'IdList'])
Это дает мне 20 соответствующих кодов GID с этих 20 номеров доступа.
Далее:
handle = Entrez.esummary(db="nucleotide", id=gids)
record = Entrez.read(handle)
Что дает мне эту ошибку, потому что один из GID в gids был удален из 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: ''
Я мог бы попробовать :, кроме: за исключением того, что пропустил бы другие 19 GID, которые в порядке.
Мой вопрос:
Как мне читать 20 записей одновременно с Entrez.read и пропускать пропущенные, не жертвуя остальными 20? Я мог бы делать по одному за раз, но это было бы невероятно медленно (у меня 300 000 номеров доступа, а NCBI позволяет выполнять только 3 запроса в секунду, но на самом деле это больше похоже на 1 запрос в секунду).