BioPython: пропуск неправильных GID с помощью Entrez.esummary / Entrez.read - PullRequest
3 голосов
/ 06 октября 2009

Извините за нечетное название.

Я использую 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 запрос в секунду).

Ответы [ 2 ]

3 голосов
/ 07 октября 2009

Я отправил сообщение в список рассылки BioPython. По-видимому, это ошибка, и они работают над этим.

0 голосов
/ 06 октября 2009

Я бы посмотрел Parser.py и увидел, что анализируется. Похоже, что вы получаете результат от NCBI, но формат одной записи отключает анализатор.

Может быть возможно создать подкласс / monkeypatch анализатора, чтобы преодолеть исключение.

...