Kodomo

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

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

Последняя комиссия

Написать программу, которая:

  1. Получает на вход с командной строки:
    • имя входного FASTA-файла
    • имя выходного FASTA-файла
    • набор параметров вида id=other_id
  2. Содержит функцию, которая считает нуклеотидный состав одной последовательности.
  3. Читает FASTA-файл, берёт из него только последовательности, id которых приведён в командной строке, при этом редактирует заголовок последовательности следующим образом: заменяет идентификатор последовательности на other_id, ассоциированный с заданным id, и заменяет описание на описание нуклеотидного состава последовательности. Дополнительно, для каждой последовательности программа выводит её нуклеотидный состав на экран.
  4. Записывает получившиеся записи в выходной FASTA-файл.

Пример

Если в нашей директории лежит eg1.fasta, то после того, как мы вызовем программу следующим образом:

python rename.py -i eg1.fasta -o renamed.fasta NODE_15=abc NODE_11=xyz

То после этого в рабочей директории должен образоваться файл renamed.fasta следующего содержания:

>xyz {'A': 20, 'C':20, 'G':20, 'T':20}
TTTGGCGCGGAGTAAACTGAATTTCAGGCAAATTAGCGCGTAGTAAACTGAATTCCAGATTACAAGTAATGTATGACTTACAATACGGCTATGT
CCAAAATCATAGCTTAAATCATAGAATTGCATTACAGTTATTGACCGCTTATAAGGAATTGACTGCACAACGCATTGTAGGAAATCTAATAGTC
>abc {'A': 21, 'C':20, 'G':20, 'T':19}
GTCAGGAAGACATTGAGAGAATGGTAAGTGAGGCTGAGAAGTACAAGAAGCAGGATGAGGAGGCTACTGCACGTTTCCATGCCAAGAATGGACT
TGAGTCTTATGCTTACAATCTGCGCAACACTCTGAACGATGACAACCTTAAGGGCAAGATTGATGAGGCTGACAAGGAGACATTGGAGAAGGCT

Комиссия

1

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

Переписать ее так, чтобы она выводила файл на экран, забирая в звёздочки все слова, написанные через дефис.

   1 """Display first word of each sentence of the input file."""
   2 import optparse
   3 import re
   4 
   5 first_word_re = r'(^|[.!?]\s+)([A-Z][a-z]+)[\s:,.]'
   6 
   7 parser = optparse.OptionParser(description=__doc__)
   8 options, args = parser.parse_args()
   9 
  10 text = open(args[0]).read()
  11 for space, word in re.findall(first_word_re, text):
  12      print word

Пример текста, на котором можно тестировать программу:

Far out in the uncharted backwaters of the unfashionable end of the Western Spiral arm of the Galaxy lies a small unregarded yellow sun.

Orbiting this at a distance of roughly ninety-eight million miles is an utterly insignificant little blue-green planet whose ape-descended life forms are so amazingly primitive that they still think digital watches are a pretty neat idea.

This planet has—or rather had—a problem, which was this: most of the people on it were unhappy for pretty much of the time. Many solutions were suggested for this problem, but most of these were largely concerned with the movements of small green pieces of paper, which is odd because on the whole it wasn't the small green pieces of paper that were unhappy.

2

Дан файл, в котором описано соотношения между id разных баз данных. Дана программа, которая получает с командной строки имя этого файла и FASTA-файла, и указание, куда писать вывод, и записывает в выходной файл те последовательности, для которых в файле соотношений есть запись.

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

   1 """Filter FASTA file to output sequences with IDs present in a ID mapping file."""
   2 import optparse
   3 import doctest
   4 
   5 def parse_map(mapfile):
   6   r"""Parse mapping.
   7 
   8   Example use:
   9   >>> parse_map(['a=b'])
  10   set(['a'])
  11   >>> map = parse_map(['a = b\n', 'b=c\n', 'def=ghi'])
  12   >>> map['a']
  13   'b'
  14   """
  15   result = set()
  16   for line in mapfile:
  17     key, value = line.split("=")
  18     result.add(key.strip())
  19   return result
  20 
  21 def process_fasta(fastafile, outfile, map):
  22   selected = False
  23   for line in fastafile:
  24     line = line.strip()
  25     if line.startswith(">"):
  26       id = line[1:].split()[0]
  27       selected = (id in map)
  28     if selected:
  29       outfile.write(line + "\n")
  30 
  31 doctest.testmod()
  32 
  33 if __name__ == "__main__":
  34   parser = optparse.OptionParser(description=__doc__)
  35   parser.add_option("-i", "--infile", help="Input FASTA file")
  36   parser.add_option("-o", "--outfile", help="Resultant FASTA file")
  37   parser.add_option("-m", "--mapping", help="File with key=value pairs")
  38   options, args = parser.parse_args()
  39 
  40   mapping = parse_map(open(options.mapping))
  41   infile = open(options.infile)
  42   outfile = open(options.outfile, 'w')
  43   process_fasta(infile, outfile, mapping)

Примеры входных данных:

a = b
c = d
e = f

>a stuff
FJASDKFJLAKSJLKF
>b description
DKJFALKDSJFKLAJSL
>c junk
DKFJALSKDJFKLJ
>d something
FJLAKSJDFLKJ

3

Дана программа, которая сортирует FASTA-файл в порядке возрастания имени последовательностей (т.е. первого слова после >). Перепишите её так, чтобы она сортировала файл в порядке возрастания остальной части описания последовательностей (т.е. всё, что после первого пробела).

   1 """Sort FASTA file by sequence names."""
   2 import optparse
   3 
   4 def parse_fasta(file):
   5   """Parse FASTA file. Return a list of tuples [('>head', 'sequence'), ...]"""
   6   result = []
   7   for line in file:
   8     line = line.strip()
   9     if line == "":
  10       continue
  11     if line[0] == ">":
  12       result.append((line, ""))
  13     else:
  14       head, sequence = result[-1]
  15       result[-1] = head, sequence + line
  16   return result
  17 
  18 def write_fasta(file, pairs):
  19   """Given a list of tuples [('>head', 'sequence'), ...], write FASTA file"""
  20   for head, sequence in pairs:
  21     file.write(head + "\n" + sequence + "\n")
  22 
  23 if __name__ == "__main__":
  24   parser = optparse.OptionParser(description=__doc__)
  25   parser.add_option("-i", "--input-file", help="input FASTA file name")
  26   parser.add_option("-o", "--output-file", help="output sorted FASTA file name")
  27   options, args = parser.parse_args()
  28 
  29   pairs = parse_fasta(open(options.input_file))
  30   pairs = sorted(pairs)
  31   write_fasta(open(options.output_file, 'w'), pairs)

Одна задача

Разбитое на маленькие задачи

  1. Написать функцию для проверки соответствия строки формату uniprot id (от 1 до 6 буквоцифр, далее символ '_', далее от 3 до 5 буквоцифр), для неё должна быть предоставлена минимальная документация и тесты. Продемонстрировать ее работу.
  2. Дан файл с таблицей соответствий идентификаторов последовательностей. Формат файла: на каждой строке перечислены через запятую идентификаторы, между которыми установлено соответствие, в произвольном порядке. Написать программу, которая позволяет по идентификатору unirpot id находить соответствующий unirpot ac. unirpot id имеет вид: от 1 до 6 буквоцифр, далее символ '_', далее от 3 до 5 буквоцифр. unirpot ac имеет вид: слово из 6 символов, первая - буква одна из A,B,C,D,E,F,O,P,Q, вторая - цифра, далее 3 цифробуквы и последняя - опять цифра.
  3. Дан файл в формате FASTA. Последовательности в FASTA-файле имеют идентификаторы unirpot id. Прочитать файл, распечатать последовательности в другой файл в формате FASTA, но с идентификаторами unirpot ac.

К.Р. 1

Задачи для зачёта

  1. введение; питон как калькулятор
  2. графические программы; random; списки
  3. циклы; условия; списки
  4. функции; графика: события & кнопки

  5. к. р. 1
  6. файлы; строки
  7. словари; кортежи; optparse
  8. регулярные выражения: match, search, findall
  9. регулярные выражения: match.group, replace; str.format
  10. к. р. 2
  11. самодокументация; тесты; модули
  12. классы
  13. исключения
  14. к. р. 3


#set 1
10     100    green
100    50     red

#set 2
10     10     yellow

>gi|5524211|gb|AAD44166.1| cytochrome b [Elephas maximus maximus]
LCLYTHIGRNIYYGSYLYSETWNTGIMLLLITMATAFMGYVLPWGQMSFWGATVITNLFSAIPYIGTNLV
EWIWGGFSVDKATLNRFFAFHFILPFTMVALAGVHLTFLHETGSNNPLGLTSDSDKIPFHPYYTIKDFLG
LLILILLLLLLALLSPDMLGDPDNHMPADPLNTPLHIKPEWYFLFAYAILRSVPNKLGGVLALFLSIVIL
GLMPFLHTSKHRSMMLRPLSQALFWTLTMDLLTLTWIGSQPVEYPYTIIGQMASILYFSIILAFLPIAGX
IENY

>MCHU - Calmodulin - Human, rabbit, bovine, rat, and chicken
   ADQLTEEQIAEFKEAFSLFDKDGDGTITTKELGTVMRSLGQNPTEAELQDMINEVDADGNGTID
   FPEFLTMMARKMKDTDSEEEIREAFRVFDKDGNGYISAAELRHVMTNLGEKLTDEEVDEMIREA
   DIDGDGQVNYEEFVQMMTAK




Дан файл с последовательностью и координатами участков. Написать программу, которая считает количество аминокислот каждого типа для заданных участков, а также выводит исходную последовательность, в которой эти участки выделены большими буквами (все остальные - маленькие). Функцию перевода участка последовательности в верхний регистр сопроводить документацией и тестом. Имена входного и выходного файлов передаются на вход программе в виде параметров командной строки.

Содержание входного файла:

1..10
12..35
200..260
LCLYTHIGRNIYYGSYLYSETWNTGIMLLLITMATAFMGYVLPWGQMSFWGATVITNLFSAIPYIGTNLV
EWIWGGFSVDKATLNRFFAFHFILPFTMVALAGVHLTFLHETGSNNPLGLTSDSDKIPFHPYYTIKDFLG
LLILILLLLLLALLSPDMLGDPDNHMPADPLNTPLHIKPEWYFLFAYAILRSVPNKLGGVLALFLSIVIL
GLMPFLHTSKHRSMMLRPLSQALFWTLTMDLLTLTWIGSQPVEYPYTIIGQMASILYFSIILAFLPIAGX
IENY