我刚开始使用bioservices软件包。现在,我将使用它检索两个引用的PMID,给定指定的信息,这是我尝试过的代码:
from bioservices import EUtils
s = EUtils()
print(s.ECitMatch("pubmed",retmode="xml", bdata="proc+natl+acad+sci+u+s+a|1991|88|3248|mann+bj|Art1|%0Dscience|1987|235|182|palmenberg+ac|Art2|"))但是它发生了一个错误:
"TypeError: ECitMatch()获得参数‘bdata’的多个值“。
有人能帮我解决那个问题吗?
发布于 2020-06-04 20:46:42
我认为问题在于,您有一个未命名的参数(pubmed);如果您查看源代码,可以看到第一个参数应该是bdata;如果像您那样提供参数,那么不清楚bdata是"pubmed"还是命名的参数bdata,因此您得到的错误。
您可以用这个最小的例子来再现它:
def dummy(a, b):
return a, b
dummy(10, a=3)会回来
TypeError: dummy()获得参数'a‘的多个值
但是,如果删除"pubmed",错误将消失,但输出仍然不完整:
from bioservices import EUtils
s = EUtils()
print(s.ECitMatch("proc+natl+acad+sci+u+s+a|1991|88|3248|mann+bj|Art1|%0Dscience|1987|235|182|palmenberg+ac|Art2|"))返回
'proc+natl+acad+sci+u+s+a|1991|88|3248|mann+bj|Art1|2014248\n'因此,只考虑到第一份出版物。您可以使用正确的回车字符 \r获得两者的结果。
print(s.ECitMatch(bdata="proc+natl+acad+sci+u+s+a|1991|88|3248|mann+bj|Art1|\rscience|1987|235|182|palmenberg+ac|Art2|"))会回来
proc+natl+acad+sci+u+s+a|1991|88|3248|mann+bj|Art1|2014248
science|1987|235|182|palmenberg+ac|Art2|3026048我认为您不必指定retmod或数据库(pubmed);如果您查看我上面链接的源代码,您可以看到:
query = "ecitmatch.cgi?db=pubmed&retmode=xml"因此,它似乎总是使用pubmed和xml。
发布于 2020-06-15 11:24:00
这里有两个问题:语法和bug。
正确的语法是:
from bioservices import EUtils
s = EUtils()
query = "proc+natl+acad+sci+u+s+a|1991|88|3248|mann+bj|Art1|%0Dscience|1987|235|182|palmenberg+ac|Art2|"
print(s.ECitMatch(query))实际上,与ICitMatch相关的底层服务只有一个数据库(pubmed)和一种格式(xml),因此这两个参数不可用:存在硬编码。因此,只需要一个参数:查询。
至于第二个问题,正如上面所指出的并报告了在生物服务问题页上,您的查询将只返回一个发布。这是一个特殊字符%0D (代替回车)没有被URL请求正确解释的问题。这个运输字符( \n,\r或%0d)现在在github上的最新版本中考虑到,如果您使用版本1.7.5,则从pypi网站考虑。
感谢威利戈特在“生物服务”页面上填充了这个问题,并提请我注意。
免责声明:我是“生物服务”的主要作者
https://stackoverflow.com/questions/61620551
复制相似问题