2009-10-06 2 views
3

Извините за странное название.BioPython: пропуская плохие GID с Entrez.esummary/Entrez.read

Я использую сследование & eSummary, чтобы перейти от

инвентарного номера -> GID -> TaxID

Предположит, что «присоединениях» представляет собой список из 20 номеров на вступление (я 20, в то время потому что это максимум, который позволит NCBI).

я:

handle = Entrez.esearch(db="nucleotide", rettype="xml", term=accessions) 
record = Entrez.read(handle) 
gids = ",".join(record[u'IdList']) 

Это дает мне 20 correspoding GIDs из этих 20 инвентарных номеров.

Далее следуют:

handle = Entrez.esummary(db="nucleotide", id=gids) 
record = Entrez.read(handle) 

Что дает мне эту ошибку, потому что один из GID, в GID, была удалена из базы данных 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 запрос в секунду).

ответ

0

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

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

+0

любые предложения относительно того, как это сделать? Я пытался ставить: если значение == «»: вернуть перед проблемной линией, но это дает мне ту же ошибку. –

+0

можете ли вы попробовать/исключить вокруг проблемной строки и распечатать значение, когда произойдет исключение? В противном случае я бы использовал отладчик –

3

Я отправил сообщение в список рассылки BioPython. Очевидно, это ошибка &, над которой они работают.