Entrez

2016-12-22 11 views
5

के साथ PubMed से पार्सिंग प्रकाशन डेटा के साथ समस्या मैं डेटाबेस में प्रकाशन डेटा आयात करने के लिए Entrez का उपयोग करने का प्रयास कर रहा हूं। खोज हिस्सा ठीक काम करता है, लेकिन जब मैं पार्स करने के लिए प्रयास करें:Entrez

from Bio import Entrez 

def create_publication(pmid): 

    handle = Entrez.efetch("pubmed", id=pmid, retmode="xml") 
    records = Entrez.parse(handle) 
    item_data = records.next() 
    handle.close() 

... मैं निम्नलिखित त्रुटि मिलती है:

File "/venv/lib/python2.7/site-packages/Bio/Entrez/Parser.py", line 296, in parse raise ValueError("The XML file does not represent a list. Please use Entrez.read instead of Entrez.parse") ValueError: The XML file does not represent a list. Please use Entrez.read instead of Entrez.parse

यह कुछ दिन पहले तक काम करता था कोड। कोई विचार क्या गलत हो सकता है?

from Bio import Entrez 
Entrez.email = "[email protected]" 
handle = Entrez.efetch("pubmed", id="19304878,14630660", retmode="xml")  
records = Entrez.parse(handle) 
for record in records: 
    print(record['MedlineCitation']['Article']['ArticleTitle']) 
handle.close() 
+1

बेवकूफ सवाल है, लेकिन आप का उपयोग कर 'Entrez.read()', और उसके बाद परिणाम को पार्स की कोशिश की? – MattDMo

+0

पढ़ा() मुख्य रूप से काम करता है, लेकिन इसके आसपास अन्य कोड का एक पूरा समूह है। तो जब मैं कोशिश करता हूं, तो मुझे अलग-अलग त्रुटियां मिलती रहती हैं। तो या तो पार्स() के लिए एक साधारण फिक्स है, या मुझे बाकी को फिर से लिखना होगा। – apiljic

+0

यह तीन दिन पहले तक काम करता था, लेकिन ऐसा लगता है कि हाल ही में पबमेड में कुछ बदल गया है, इसलिए यह अब विफल हो गया है। – apiljic

उत्तर

2

मुद्दा है, और अन्य टिप्पणी में दर्ज GitHub Issue के रूप में, एक के कारण होता है:

इसके अलावा, स्रोत कोड (http://biopython.org/DIST/docs/api/Bio.Entrez-pysrc.html) देख रही है और सूचीबद्ध उदाहरण का अनुसरण करने की कोशिश कर रहा है, वही त्रुटि देता है एनसीबीआई एंट्रेज़ यूटिलिटी डेवलपर्स द्वारा किए गए जानबूझकर परिवर्तन। के रूप में Jhird करके इस समस्या में दस्तावेज, तो आपको निम्न के लिए अपने कोड बदल सकते हैं:

from Bio import Entrez 
Entrez.email = "[email protected]" 
handle = Entrez.efetch("pubmed", id="19304878,14630660", retmode="xml") 

records = Entrez.read(handle)  # Difference here 
records = records['PubmedArticle'] # New line here 

for record in records: 
    print(record['MedlineCitation']['Article']['ArticleTitle']) 
handle.close()