Python 如何解决;ECitMatch()为参数';获取了多个值;b数据'&引用;?

Python 如何解决;ECitMatch()为参数';获取了多个值;b数据'&引用;?,python,bioservices,Python,Bioservices,我是第一次使用bioservicesPython包。现在我将使用它来检索两个引用的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|Art

我是第一次使用
bioservices
Python包。现在我将使用它来检索两个引用的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”获取了多个值


有人能帮我解决这个问题吗?

我想问题是你有一个未命名的参数(
publimed
);如果查看,可以看到第一个参数应该是
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

我认为问题在于您有一个未命名的参数(
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
两个问题:语法和bug

正确的语法是:

从生物服务导入EUTIL
s=EUtils()
query=“proc+natl+acad+sci+u+s+a | 1991 | 88 | 3248 | mann+bj | Art1 |%0Dscience | 1987 | 235 | 182 | palmenberg+ac | Art2 |”
打印(s.ECitMatch(查询))
实际上,与ICitMatch相关的底层服务只有一个数据库(pubmed)和一种格式(xml),因此,这两个参数不可用:有硬编码的。因此,只需要一个参数:您的查询

至于第二个问题,如上所述,您的查询将只返回一个发布。URL请求无法正确解释特殊字符%0D(代替回车符),这是一个问题。github上的最新版本或pypi网站(如果您使用的是1.7.5版)现在考虑使用此回车符(或\n\r或%0d)

感谢您填写生物服务页面上的问题并引起我的注意


免责声明:我是bioservices的主要作者,这里有两个问题:syntaxic和bug

正确的语法是:

从生物服务导入EUTIL
s=EUtils()
query=“proc+natl+acad+sci+u+s+a | 1991 | 88 | 3248 | mann+bj | Art1 |%0Dscience | 1987 | 235 | 182 | palmenberg+ac | Art2 |”
打印(s.ECitMatch(查询))
实际上,与ICitMatch相关的底层服务只有一个数据库(pubmed)和一种格式(xml),因此,这两个参数不可用:有硬编码的。因此,只需要一个参数:您的查询

至于第二个问题,如上所述,您的查询将只返回一个发布。URL请求无法正确解释特殊字符%0D(代替回车符),这是一个问题。github上的最新版本或pypi网站(如果您使用的是1.7.5版)现在考虑使用此回车符(或\n\r或%0d)

感谢您填写生物服务页面上的问题并引起我的注意

免责声明:我是《生物服务》的主要作者