Скрипт для разбора биологической последовательности из общедоступной базы данных на Python

Приветствую сообщество stackoverflow,

В настоящее время я изучаю модуль биоинформатики как часть биомедицинской степени (я в основном новичок в Python), и в рамках задания по программированию на Python требуется следующая задача:

извлекать последовательности мотивов (аминокислотные последовательности, то есть, в основном, строки на программном языке, которые были исключены из алгоритмов, реализующих множественное выравнивание последовательностей и последующее итеративное сканирование базы данных для создания наиболее консервативных последовательностей. Окончательная идея состоит в том, чтобы сделать вывод о функциональном значении таких « мотивы»).

Эти мотивы хранятся в общедоступной базе данных в файлах, которые имеют несколько полей данных, соответствующих каждому белку (идентификатор uniprot, номер доступа, само выравнивание, хранящееся в файле гиперссылки .seq), в настоящее время одно из которых представляет интерес в этой области. Поле данных называется «извлеченные наборы мотивов».

Мой вопрос заключается в том, как написать сценарий, который по существу будет анализировать «строки мотивов» и выводить их в файл. Я сейчас закодировал скрипт так, что он выглядит следующим образом (я пока не записываю результаты в файлы):

import os, re, sys, string 

printsdb = open('/users/spyros/folder1/python/PRINTSmotifs/prints41_1.kdat', 'r')

protname = None  
final_motifs = []

for line in printsdb.readlines():
 if line.startswith('gc;'):
        protname = line.lstrip()    
        #string.lower(name)  # convert to lowercase
        break

def extract_final_motifs(protname):

"""Extracts the sequences of the 'final motifs sets' for a PRINTS entry.
Sequences are on lines starting 'fd;' A simple regex is used for retrieval"""

for line in printsdb.readlines():
        if line.startswith('fd;'):
                final_motifs = re.compile('^\s+([A-Z]+)\s+<')
                final_motifs = final_motifs.match(line)
                #print(final_motifs.groups()[0])
                motif_dict = {protname : final_motifs}
                break 
return 

motif_dict = extract_final_motifs('ADENOSINER')
print(motif_dict)  

Теперь проблема заключается в том, что, хотя мой код зацикливается на необработанном файле базы данных (prints41_!.kdat) вместо подключения к общедоступной базе данных с помощью модуля urllib, как это предлагает Саймон Кокелл ниже, вывод сценария просто «нет» на python, тогда как он должен создавать список, такой как [AAYIGIEVLI, AAYIGIEVLI, AAYIGIEVLI и т. д.]

Кто-нибудь знает, где логическая ошибка? Любой вклад приветствуется! Я извиняюсь за обширный текст, я просто надеюсь быть ясным, насколько это возможно. Заранее благодарю за любую помощь!


person Spyros    schedule 10.04.2011    source источник
comment
Может быть, опубликовать это на Biostars.org: сайт обмена стеками, ориентированный на биоинформатику: biostar.stackexchange.com   -  person Tim    schedule 10.04.2011
comment
Спасибо за совет, тогда попробую биостарс.   -  person Spyros    schedule 10.04.2011


Ответы (2)


Во-первых, то, что вы делаете, почти правильно, но вам нужно изменить "extracted motif sets" залог 2 на переменную, скажем, line . Что будет делать цикл for, так это возвращать данные из файла построчно в качестве переменной после for в этом случае line. И теперь возникает вопрос, как форматируется файл lysozyme.seq. похоже, что ни одно из полей данных не имеет пробелов. Тогда это означает, что вам может сойти с рук выполнение line.split(" ") или line.split("\t") \t измерений. раскол будет делать то, что он говорит, он разделяет строку каждый раз, когда видит " " или "\t" в зависимости от того, что вы пишете в программе.

Санирование каталога для поиска файлов не должно быть сложным, возможно, здесь есть некоторые вопросы по этому поводу.

Если вы опубликуете данные или часть в форме одного из файлов, чтобы мы могли их просмотреть, мы могли бы помочь вам их проанализировать :).

person KilledKenny    schedule 10.04.2011
comment
Здравствуйте и спасибо за комментарии. lysozyme.seq, или ----.seq в качестве общего имени файла для базы данных, отформатирован, насколько я могу судить, в ASCII. Это выравнивание с промежутками, выделенное цветом, со средним значением. 10 белковых последовательностей (в основном строк). Поля данных, расположенные в отдельном файле, который имеет гиперссылку на файл выравнивания (----.seq), имеют пробелы, потому что это (в основном) данные последовательности, предназначенные для представления в удобочитаемом формате. Я опубликую пример поля данных, чтобы лучше понять, что я пытаюсь сделать. Еще раз спасибо за совет :Р - person Spyros; 11.04.2011
comment
Очень сложно дать совет, как обращаться с данными, не зная, как они выглядят :P Но напишите мне, когда выставите несколько образцов. - person KilledKenny; 11.04.2011
comment
Из соображений форматирования я публикую ссылку на тип файла базы данных, с которым я работаю. bioinf .manchester.ac.uk/cgi-bin/dbbrowser/PRINTS/. Я хотел бы в основном анализировать последовательности (строки заглавных букв) в поле данных FINAL MOTIF SETS. Мне нужно было бы иметь возможность делать это систематическим образом, поскольку в этой базе данных есть пара сотен файлов. Гиперссылка выравнивания вида в самом верху рядом с именем — это место, где находится выравнивание (файл .seq). - person Spyros; 11.04.2011

Вы заметили, что ваша функция не возвращает значение? Это причина для None.

person volcano    schedule 06.11.2013