3

对不起,奇怪的标题。

我正在使用 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 次查询)。

4

2 回答 2

3

我向 BioPython 邮件列表发送了一条消息。显然这是一个错误,他们正在处理它。

于 2009-10-07T13:52:55.947 回答
0

我会看一下 Parser.py 并查看正在解析的内容。看起来您从 NCBI 得到的结果是好的,但是一条记录的格式使解析器出错。

可以对解析器进行子类化/monkeypatch 以使其通过异常。

于 2009-10-06T04:24:01.947 回答