对于奇怪的头衔感到抱歉。
我正在使用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次查询)。
答案 0 :(得分:3)
我向BioPython邮件列表发送了一条消息。显然这是一个错误&他们正在努力。
答案 1 :(得分:0)
我看看Parser.py并查看正在解析的内容。看起来你从NCBI ok得到了一个结果,但是一条记录的格式正在绊倒解析器。
有可能对解析器进行子类化或monkeypatch以使其超越异常。