2016-04-19 2 views
0

Мой код выглядит следующим образом:Entrez и SeqIO «никаких записей не найдено в ручке»

import re 
from Bio import SeqIO 
from Bio import Entrez 

Entrez.email = "[email protected]" # My e-mail address 

handle1 = Entrez.efetch(db="pubmed", id=pmid_list_2010, rettype="gb", retmode="text") 
data1 = handle1.read() 
handle1.close() 
handle2 = Entrez.efetch(db="pubmed", id=pmid_list_2011, rettype="gb", retmode="text") 
data2 = handle2.read() 
handle2.close() 
handle3 = Entrez.efetch(db="pubmed", id=pmid_list_2012, rettype="gb", retmode="text") 
data3 = handle3.read() 
handle3.close() 
handle4 = Entrez.efetch(db="pubmed", id=pmid_list_2013, rettype="gb", retmode="text") 
data4 = handle4.read() 
handle4.close() 
handle5 = Entrez.efetch(db="pubmed", id=pmid_list_2014, rettype="gb", retmode="text") 
data5 = handle5.read() 
handle5.close() 
handle6 = Entrez.efetch(db="pubmed", id=pmid_list_2015, rettype="gb", retmode="text") 
data6 = handle6.read() 
handle6.close() 

out_handle = open("test2.gb", "w") 
out_handle.write(data1) 
out_handle.write(data2) 
out_handle.write(data3) 
out_handle.write(data4) 
out_handle.write(data5) 
out_handle.write(data6) 
out_handle.close() 

in_handle = open("test2.gb", "r") 
record = SeqIO.read(in_handle,"genbank") 
in_handle.close() 

Предпоследняя последней строки дает мне эту ошибку:

ValueError: No records found in handle 

Мой файл выглядит нормально - это не пусто или ничего. Есть много записей и, насколько я могу судить, это в правильном формате. Что я делаю неправильно?

Я заметил, что это работает с другими базами данных - например, «нуклеотид». Это проблема с Pubmed? Это требует другого формата? Благодарю.

+0

Если есть содержание в файле, но вы получаете эту ошибку, это. предполагает, что он * не *, фактически, в правильном формате. Можете ли вы добавить несколько строк 'test2.gb'? – SiHa

+0

Что такое ** правильный ** формат? Можете ли вы восстановить последовательности из PubMed? – Markus

ответ

0

Вы пытаетесь разобрать неправильный формат. Когда вы запрашиваете базу данных «pubmed», вы получаете только rettypes medline, uilist или abstract. Тем не менее вы просите о возврате Genbank, что не имеет смысла в этом контексте.

Вместо этого вы можете использовать Medline анализатор:

from Bio import Medline 

h1 = Entrez.efetch(db="pubmed", 
        id=["26837606"], 
        rettype="medline", 
        retmode="text") 

for record in Medline.parse(h1): 
    print(record["TI"]) 

Выходы

Exploiting the CRISPR/Cas9 System for Targeted Genome Mutagenesis in Petunia. 
+0

Благодарим вас за эту информацию, я не знал, что pubmed не поддерживает genbank. Однако я не уверен, как использовать свой код для записи в тестовый файл, а затем прочитать его с помощью SeqIO. Как мне это сделать? – jarch

+0

Вы не запрашиваете последовательности, поэтому вы не можете использовать SeqIO. Вы пытаетесь получить документы или последовательности? – xbello

+0

Хорошая точка. Я пытаюсь получить документы, чтобы запросить их заголовки, содержащие определенное слово. Мой желаемый результат представляет собой суммарное значение количества заголовков, содержащих это слово. – jarch

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