Kodomo

Пользователь

Учебная страница курса биоинформатики,
год поступления 2013

Подсказки и советы к практикуму 7

Задание 2. Скрипт, читающий fasta-файл с несколькими последовательностями

Ваш скрипт должен состоять из следующих смысловых частей. Советую выделить их в тексте скрипта как-нибудь, как минимум разделяющими их пустыми строками, а еще лучше - строками-комментариями.

При работе над скриптом очень полезно писать смысловые части по очереди и проверять, правильно ли они работают. Не старайтесь сперва написать все, а потом запустить: это можно делать только тогда, когда Вы очень уверены в своих силах!

2.1. Задайте класс, который будет описывать белки

  1. Выберите ему подходящее название (например, Protein).

  2. Создайте три атрибута класса. Обдумайте имена атрибутов и этого класса: они должны быть лаконичными, но отражающими назначение переменной или функции. Например:
    • идентификатор – id_RefSeq;

    • описание  – description;

    • последовательность – sequence.

  3. Добавьте к классу пустой инициализирующий метод __init__(self), т.е. в теле метода не пишите никаких команд, вместо этого напишите, допустим, 5 + 3 или 0. Совсем пустым метод оставить нельзя, будут ошибки :( О том, что это за метод, можно почитать подробнее в справочной информации. Мы еще вернемся к нему чуть позже.

  4. Добавьте к классу метод, печатающего информацию в формате fasta с заданным числом букв в строке последовательности. Например, можно назвать его print_fasta. Если Вы уже сделали задание практикума 6, то по сути реализация этого метода у Вас уже есть! Если нет, ничего страшного: напишите его сейчас. Та функция, напомню, должна была принимать 4 аргумента (идентификатор, описание, последовательности и количество символов), а этот метод сможет обойтись двумя: вызвавшим его объектом (self), через который он сможет обратиться к идентификатору, описанию и последовательности, и, собственно, желаемым числом букв.


2.2. Протестируйте заданный класс

  1. Попробуйте создать экземпляр класса: напишите, например, a = Protein().

  2. Вручную задайте атрибуты этого белка. Задавать их можно точно так же, как обычные переменные; только имя переменной-атрибута сложное и состоит из имени экземпляра класса, которому принадлежит эта переменная, точки и названия атрибута. Например, чтобы задать описание только что созданного объекта a, можно написать: a.description = "hypothetical protein. Попробуйте сделать то же самое для других атрибутов!

  3. Вызовите атрибуты объекта a на печать по очереди с помощью обычной команды print. Опять-таки, атрибут объекта a – то же самое, что обычная переменная, только имя у нее сложное. Проверьте, что все работает.

  4. Вызовите у объекта a метод print_fasta(), подав ей на вход ОДИН аргумент – нужное число букв в строке последовательности. Заметьте, что при задании функции Вы прописывали ей 2 аргумента, первый с именем self, а второй как раз нужное число букв. В этом разделе справки можно прочитать подробнее про это.


2.3. Задание инициализирующего метода __init__()

Пришло время сделать так, чтобы при создании экземпляра класса можно было сразу же передать нужные значения атрибутов, а не выписывать их отдельными тремя командами.

a = Protein("YP_0000001", "hypothetical protein", "MDRFTDFGAAAAAA"

2.4. Алгоритм чтения файла

Совет:: используйте в этом алгоритме свои наработки, полученные в предыдущем практикуме. Если какое-то из заданий того практикума выполнить не удалось, подумайте, каким образом с помощью циклов, условий и функций строк и списков можно реализовать две вещи:

После этого можете изучить алгоритм:


2.5. Проверьте, что алгоритм чтения файла работает

  1. Для проверки в тех местах, где у Вас создается новый объект класса Protein, заставьте скрипт выводить на экран командой print значения переменных-контейнеров. Убедитесь, что эти значения - именно то, что должно в них содержаться.

  2. Если что-то не работает, пройдитесь по своему алгоритму еще раз, сверяя его с описанным выше. Проверьте внимательно уровни вложенности условий внутри цикла! Об отступах и уровнях вложенности можно подробнее прочитать разъяснение тут.

  3. Если Вы все сделали верно – Вы получили список из четырех элементов класса Protein.

  4. Проверьте длину списка, распечатайте на пробу идентификатор, описание и последовательность какого-то одного из них.


2.6. Финальная проверка работы скрипта и распечатка информации в формате fasta

  1. Если все работает, напишите цикл, который будет проходить по списку белков и вызывать у каждого его элемента метод класса, печатающий информацию в формате fasta на экран.
  2. В качестве контрольной проверки работоспособности скрипта сохраните результат его работы в файл с помощью оператора перенаправления потока STDOUT – > (см. подсказки к практикуму 5). Если все верно, это должен быть файл в формате fasta; попробуйте запустить скрипт еще раз, подав ему в качестве аргумента этот файл: все должно работать.


Задание 3. Обработка информации из командной строки

В этой части вам надо импортировать модуль sys и проверить, сколько элементов в его списке argv, которое хранит информацию о поданных скрипту аргументах.