В настоящее время я пытаюсь сформировать цикл, в котором я могу тестировать различные запросы в PubMed.Я использовал Entrez и Medline BioPython для настройки одного запроса (см. «СРОК»).Однако я не очень хорошо умею создавать циклы или функции для тестирования нескольких запросов.Есть ли способ сделать это эффективно?
from Bio import Entrez, Medline
#Initialisation
Entrez.email = "example@gmail.com"
TERM= "infant*[mh] AND colic[majr]"
TERM2="infant AND colic AND herbal[mh]"
TERM3 = "test"
handle = Entrez.egquery(term=TERM)
record = Entrez.read(handle)
for row in record["eGQueryResult"]:
if row["DbName"]=="pubmed":
print(row["Count"])
#filtering process
handle = Entrez.esearch(db="pubmed",
term=TERM,
retmax='100',
sort='relevance',
retmode='xml',
mindate="2016/11",
maxdate="2019/02")
record = Entrez.read(handle)
handle.close()
idlist = record["IdList"]
for i in idlist:
if i == '27631535':
idlist.remove(i)
print(idlist)
#downloading the corresponding MEDLINE records
handle = Entrez.efetch(db="pubmed",
id=idlist, rettype="medline", retmode="json")
records = Medline.parse(handle)
records = list(records)
output = []
for record in records:
#if record[PMID] == '27631535':
#records.remove(record)
print("title:", record.get("TI", "?"))
print("PMID:", record.get("PMID", "?"))
print("MeSH Terms:", record.get("MH","?"))
#print("abstracts:", record.get("AB", "?"))
output.append(record["TI"]["PMID"]["MH"])
print("")
with open('bp_results.txt', 'w') as f:
for record in output:
f.write("%s\n" % record)