我正在进行一个项目,它要求我使用来自pubmed电子表格的输入和结果的打印计数来搜索Excel。我一直在使用xlrd和entrez来完成这项工作。这是我尝试过的。
pubmed,这些都在Excel电子表格中。我使用xlrd将包含所需信息的每一列转换为字符串列表。
从xlrd导入open_workbook book =open_workbook med_name = [] sheet.col(2)中的行:med_name.append(行) med_school = []用于sheet.col(3)中的行:med_school.append(行) for = []用于sheet.col(9)中的行:mentor.append(行)我认为我应该在向pubmed声明我的电子邮件之后编写一个for循环,但是我不知道如何将这两个代码块连接在一起。有没有人知道连接这两个代码块的有效方法,或者知道如何用比我尝试过的方法更有效的方法来实现这一点?谢谢!
发布于 2016-10-11 07:39:08
你已经把大部分代码都准备好了。只是需要稍微修改一下。
假设您的桌子看起来像这样:
Jennifer Bunch |Southern Illinois University School of Medicine|Leonard P. Rybak
Philipp Robinson|Stanford University School of Medicine |Roger Kornberg您可以使用以下代码
import xlrd
from Bio import Entrez
sheet = xlrd.open_workbook("HEENT.xlsx").sheet_by_index(0)
med_name = list()
med_school = list()
mentor = list()
search_terms = list()
for row in range(0, sheet.nrows):
search_terms.append([sheet.cell_value(row, 0), sheet.cell_value(row,1), sheet.cell_value(row, 2)])
pubmed_counts = list()
for search_term in search_terms:
handle = Entrez.egquery(term="{0} AND ((2012[Date - Publication] : 2017[Date - Publication])) ".format(search_term[0]))
handle_1 = Entrez.egquery(term = "{0} AND ((2012[Date - Publication] : 2017[Date - Publication])) AND {1}".format(search_term[0], search_term[2]))
handle_2 = Entrez.egquery(term = "{0} AND ((2012[Date - Publication] : 2017[Date - Publication])) AND {1}".format(search_term[0], search_term[1]))
record = Entrez.read(handle)
record_1 = Entrez.read(handle_1)
record_2 = Entrez.read(handle_2)
pubmed_count = ['', '', '']
for row in record["eGQueryResult"]:
if row["DbName"] == "pubmed":
pubmed_count[0] = row["Count"]
for row in record_1["eGQueryResult"]:
if row["DbName"] == "pubmed":
pubmed_count[1] = row["Count"]
for row in record_2["eGQueryResult"]:
if row["DbName"] == "pubmed":
pubmed_count[2] = row["Count"]
print(pubmed_count)
pubmed_counts.append(pubmed_count)输出
['3', '0', '0']
['1', '0', '0']所需的修改是使用格式化使查询变量。
一些没有必要但可能有帮助的其他修改:
Excel表上循环一次pubmed_count存储在预定义列表中,因为如果值返回为空,则输出的大小将不同,因此很难猜测哪个值属于哪个查询。https://stackoverflow.com/questions/39968425
复制相似问题