#python #text-processing #bioinformatics #biopython
#python #обработка текста #биоинформатика #biopython
Вопрос:
Приветствую сообщество stackoverflow,
В настоящее время я изучаю модуль биоинформатики как часть биомедицинской степени (я в основном новичок в Python), и следующая задача требуется как часть задания по программированию на Python:
извлеките последовательности мотивов (аминокислотных последовательностей, то есть в основном строк, выражаясь программным языком, которые были вырезаны из алгоритмов, реализующих выравнивание нескольких последовательностей и последующее итеративное сканирование базы данных для генерации наиболее сохраненных последовательностей. Конечная идея состоит в том, чтобы вывести функциональную значимость из таких «мотивов»).
Эти мотивы хранятся в общедоступной базе данных в файлах, которые имеют несколько полей данных, соответствующих каждому белку (идентификатор uniprot, регистрационный номер, само выравнивание, хранящееся в файле hyperlink .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 и т.д.]
Кто-нибудь имеет представление, где логическая ошибка? Приветствуется любой вклад!! Прошу прощения за обширный текст, я просто надеюсь быть максимально понятным. Заранее спасибо за любую помощь!
Комментарии:
1. Может быть, опубликовать это на Biostars.org : Сайт обмена стеками, ориентированный на биоинформатику: biostar.stackexchange.com
2. Спасибо за совет, тогда попробую biostars.
Ответ №1:
Первое из того, что вы делаете, почти правильно, но вам нужно изменить "extracted motif sets"
lien 2 на переменную say line
. Что будет делать for
цикл, так это возвращать данные из файла построчно в качестве переменной после for
этого случая line
. И теперь возникает вопрос, как формируется lysozyme.seq
файл. похоже, что ни в одном из полей данных нет интервалов. Тогда это означает, что вы можете обойтись без line.split(" ")
или line.split("t")
t
вкладки meas. split будет делать то, что он говорит, он дозирует разделять строку каждый раз, когда он видит " "
или "t"
в зависимости от того, что вы пишете в программе.
Очистка каталога для поиска файлов не должна быть сложной, вероятно, здесь есть некоторые вопросы по этому поводу.
Если вы разместите данные или их часть в виде одного из файлов, чтобы мы могли взглянуть на них, мы могли бы помочь вам их проанализировать :).
Комментарии:
1. Здравствуйте и спасибо за комментарии. lysozyme.seq, или —-.seq как общее имя файла для базы данных, отформатирован, насколько я могу судить, в ASCII. Это выравнивание со средним числом последовательностей белка 10 (в основном строк) с пробелами и цветовой кодировкой. Поля данных, расположенные в отдельном файле, который имеет гиперссылку на файл выравнивания (—-.seq), имеют интервал, потому что это (в основном) данные последовательности, предназначенные для представления в удобочитаемом формате. Я опубликую пример поля данных, чтобы дать лучшее представление о том, что я пытаюсь сделать. Еще раз спасибо за совет: P
2. Действительно сложно давать советы, как обращаться с данными, не зная, как они выглядят: P Но напишите мне в личку, когда выложите несколько образцов.
3. По соображениям форматирования я размещаю ссылку на тип файла базы данных, с которым я работаю. bioinf.manchester.ac.uk/cgi-bin/dbbrowser/PRINTS /… . В основном я хотел бы проанализировать последовательности (строки из заглавных букв) в поле данных «ОКОНЧАТЕЛЬНЫЕ НАБОРЫ МОТИВОВ». Мне нужно было бы иметь возможность делать это систематически, поскольку в этой базе данных имеется пара сотен файлов. Гиперссылка «просмотреть выравнивание» в самом верху рядом с именем указывает, где находится выравнивание (файл.seq)
Ответ №2:
Вы заметили, что ваша функция не возвращает значение? Это причина отсутствия.