BioPython:使用Entrez.esummary / Entrez.read跳过错误的GID

时间:2009-10-06 04:15:15

标签: python bioinformatics biopython

对于奇怪的头衔感到抱歉。

我正在使用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个入藏号码的20个对应GID。

其次是:

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

这给了我这个错误,因为gids中的一个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之外没事。

我的问题是:

如何使用Entrez.read一次读取20条记录,并跳过那些丢失而不牺牲其他20条记录的记录?我可以一次做一个但速度非常慢(我有300,000个加入号码,而NCBI只允许你每秒做3次查询,但实际上它更像是每秒1次查询)。

2 个答案:

答案 0 :(得分:3)

我向BioPython邮件列表发送了一条消息。显然这是一个错误&他们正在努力。

答案 1 :(得分:0)

我看看Parser.py并查看正在解析的内容。看起来你从NCBI ok得到了一个结果,但是一条记录的格式正在绊倒解析器。

有可能对解析器进行子类化或monkeypatch以使其超越异常。