Извлечение и анализ белковых последовательностей из GenBank с помощью Entrez в BioPython

Как скоро станет очевидно, я новичок в Python и программировании в целом. У меня есть список идентификаторов генов, хранящихся в виде текстового файла, и я хочу использовать функции Entrez для поиска в базе данных GenBank и извлечения последовательностей белков, соответствующих идентификаторам. В идеале я хочу, чтобы конечным продуктом был файл FASTA, поскольку на данный момент меня интересует только последовательность. Используя учебник Biopython (http://biopython.org/DIST/docs/tutorial/Tutorial.html#sec15), я придумал следующее:

from Bio import Entrez
from Bio import SeqIO
Entrez.email = "[email protected]"
id_list = set(open('test.txt', 'rU'))
handle = Entrez.efetch(db="protein", id=id_list, rettype="fasta", retmode="text")   
for seq_record in SeqIO.parse(handle, "fasta"):
    print ">" + seq_record.id, seq_record.description
print seq_record.seq
handle.close()

Но когда я запускаю его, я получаю ошибку:

File "C:/Python27/Scripts/entrez_files.py", line 5, in <module>
  handle = Entrez.efetch(db="protein", id=id_list, rettype="fasta", retmode="text")
File "C:\Python27\lib\site-packages\Bio\Entrez\__init__.py", line 145, in efetch
  if ids.count(",") >= 200:
AttributeError: 'set' object has no attribute 'count'

Я получаю аналогичную ошибку каждый раз, когда использую rettype = 'fasta'. Когда я использую rettype = 'gb', я не получаю эту ошибку, но я действительно хочу получить файл fasta. У кого-нибудь есть предложения? Спасибо!

РЕДАКТИРОВАТЬ: извините, я забыл указать, на что похож входной файл. В идеальном мире код принимал бы такой формат ввода:

gi|285016822|ref|YP_003374533.1|
gi|285018887|ref|YP_003376598.1|
gi|285016823|ref|YP_003374534.1|
gi|285016824|ref|YP_003374535.1| 
....

Но я также пытался использовать упрощенную версию только с идентификаторами генов (GI), например:

285016822 
285018887 
285016823
285016824...

person JayB    schedule 30.12.2013    source источник
comment
Как выглядит файл test.txt? Можете ли вы показать некоторые образцы данных?   -  person Stedy    schedule 31.12.2013
comment
Совет: для вопросов, связанных с биоинформатикой, также существует сайт вопросов и ответов, например stackoverflow: biostars.org.   -  person BioGeek    schedule 31.12.2013
comment
Я обновил сообщение, чтобы включить формат ввода!   -  person JayB    schedule 31.12.2013


Ответы (1)


Как видно из исходного кода efetch, id параметр должен иметь метод count. Обычно это будет строка с одним идентификатором или список Python со всеми идентификаторами. Вы используете set, предположительно, чтобы исключить повторяющиеся значения, поэтому вы можете преобразовать в список, подобный этому:

id_list = set(open('test.txt', 'rU'))
id_list = list(id_list) 
person Paulo Almeida    schedule 30.12.2013
comment
Да, это было именно то, что мне было нужно. Спасибо! - person JayB; 31.12.2013