Скрипт для разбора биологической последовательности из публичной базы данных в Python - PullRequest
2 голосов
/ 10 апреля 2011

Привет сообществу 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 и т. д.] *

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

Ответы [ 2 ]

0 голосов
/ 06 ноября 2013

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

0 голосов
/ 11 апреля 2011

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

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

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

...