2016-11-04 2 views
0

Я использую BioPython для заполнения CSV-файла данных о цитатах из их названия PubMed. Я написал это до сих пор:Поиск PubMed с использованием BioPython и запись в CSV

import csv 
from Bio import Entrez 
import bs4 

Entrez.email = "my_email" 
CSVfile = open('srData.csv') 
fileReader = csv.reader(CSVfile) 
Data = list(fileReader) 

with open('blank.csv','w') as f1: 
    writer=csv.writer(f1, delimiter='\t',lineterminator='\n',) 
    for id in Data: 
    handle = Entrez.efetch(db="pubmed", id=id, rettype="gb", retmode="xml") 
    record = Entrez.read(handle) 
    title=record[0]['MedlineCitation']['Article']['ArticleTitle'] 
    abstract=record[0]['MedlineCitation']['Article']['Abstract'] 
    mesh =record[0]['MedlineCitation']['MeshHeadingList'] 
    descriptors = ','.join(term['DescriptorName'] for term in mesh) 
    writer.writerow([title, abstract, descriptors]) 

Однако, это производит необычный выход, где название, аннотация и MeSH термины распределены по нескольким столбцам, а не разделены, которые я полагаю, из-за их типа.(). Я хочу, чтобы моя таблица csv была сделана из трех столбцов, одна из которых содержит заголовок, другая - абстрактная, а другая - сетчатые.

Как это сделать?

Пример вывода

Чтобы уточнить, первый столбец содержит весь заголовок и начало абстрактного и последующие несколько столбцов содержат последующие части реферата. Я требую, чтобы они были разбиты на отдельные столбцы. то есть. Первый столбец должен содержать только заголовок. Секрет - только абстрактный, третий - только термины MeSH.

В настоящее время, первый столбец содержит:

"Distinct and combined vascular effects of ACE blockade and HMG-CoA reductase inhibition in hypertensive subjects. {u'AbstractText': ['Hypercholesterolemia and hypertension are frequently associated with elevated sympathetic activity. Both are independent cardiovascular risk factors and both affect endothelium-mediated vasodilation. To identify the effects of cholesterol-lowering and antihypertensive treatments on vascular reactivity and vasodilative capacity" 
+0

Что вы подразумеваете под «названием, абстрактные и термины MeSH распространяются по нескольким столбцам "? Можете ли вы показать нам примерный выход? – larsks

+0

@ Ярски. Сделали это. – Toby

ответ

0

Значение record[0]['MedlineCitation']['Article']['Abstract'] представляет собой словарь, который содержит абстрактный текст и более короткое резюме. Если вы хотите реально аннотацию, вместо:

abstract=record[0]['MedlineCitation']['Article']['Abstract'] 

Понадобится:

abstract=record[0]['MedlineCitation']['Article']['Abstract']['AbstractText'][0] 

Теперь abstract содержит одну строку и должны быть пригодны для записи в файл CSV.

Update

Я не могу воспроизвести ошибку вы описали в своем комментарии, даже при использовании той же входные данные:

>>> from Bio import Entrez 
>>> Entrez.email = '...' 
>>> id=10067800 
>>> handle = Entrez.efetch(db="pubmed", id=id, rettype="gb", retmode="xml") 
>>> record = Entrez.read(handle) 
>>> abstract=record[0]['MedlineCitation']['Article']['Abstract']['AbstractText'][0] 
>>> abstract 
StringElement('To assess the antihypertensive efficacy and safety of the novel AT1 receptor antagonist, telmisartan, compared with that of enalapril in elderly patients with mild to moderate hypertension.', attributes={u'NlmCategory': u'OBJECTIVE', u'Label': u'OBJECTIVE'}) 
>>> 
+0

Я пробовал это, но получил эту ошибку: Traceback (последний последний звонок): Файл «/Users/.../Desktop/csvPubMed.py», строка 16, в abstract = запись [0] ['MedlineCitation' ] ['Article'] ['Abstract'] ['AbstractText'] KeyError: 'Abstract' – Toby

+0

Эта ошибка не имеет никакого смысла, потому что путь 'record [0] ['MedlineCitation'] ['Article'] ['Abstract'] 'это то, что вы * уже * используете в своем коде. Если код, который вы отправили в своем вопросе, работает без ошибок, вы не должны видеть эту ошибку с моим кодом (хотя, возможно, вы увидите ошибку в отношении «AbstractText», если ваши данные отличаются от того, что я использовал). – larsks

+0

В первой колонке по-прежнему представлены части тезисов. – Toby

Смежные вопросы