Kodomo

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

Файлы и строки

Ссылки

План рассказа

Болванка для скрипта

   1 #!/usr/bin/python
   2 """Sepuliakr -- a tool for abstracting sepulia before sepulking."""
   3 # Русские комментарии из тела программы нужно удалить,
   4 # иначе питон будет ругаться -- и поделом! Вы не только для себя пишете,
   5 # а далеко не все, кто это будут читать, знают русский.
   6 import optparse
   7 import doctest
   8 import sys
   9 
  10 def main(options, args):
  11     # Здесь мы пишем самый содержательный код
  12     # Например:
  13     print options.quality
  14     print args
  15 
  16 # Здесь мы пишем другие функции
  17 # Лучше функции располагать в таком порядке:
  18 #  1) сначала важное, потом вспомогательное
  19 #  2) функции из одной темы идут рядом, из разных тем порознь
  20 
  21 if __name__ == "__main__":
  22     parser = optparse.OptionParser(description=__doc__)
  23     parser.add_option("-q", "--quality",
  24         help="Quality of sepulka involved")
  25     parser.add_option("-t", "--test", action="store_true",
  26         help="Run self-tests")
  27     options, args = parser.parse_args()
  28 
  29     if options.test:
  30         failed, tests = doctest.testmod()
  31         print "{0} failed of {1} tests".format(failed, tests)
  32         sys.exit(failed != 0)
  33 
  34     main(options, args)

Контрольная работа

  1. Имя:
  2. Нарисуйте состояние памяти интерпретатора питона после следующих действий:
    •    1 class A(object):
         2     a = []
         3     def __init__(self):
         4         self.a = self.a + [self]
         5 x = A()
         6 A.a.append(x)
         7 y = A()
      
  3. Опишите функцию gcd(a, b), которая считает наибольший общий делитель двух чисел алгоритмом Евклида: до тех пор, пока одно из чисел не обратилось в 0, большее из чисел заменяем на остаток от деления большего числа на меньшее число; ответом будет значение того числа, которое в ноль не обратилось.

Задание

Памятка: задание – то, что обязательно выполнить для получения зачёта; упражнения – необязательные, но как правило задание решить проще, если сначала выполнить все упражнения; если вы меня пнёте, выдам вам комментарии про то, что и как лучше, и по заданию, и по упражнениям.

Напишите скрипт join.py, который объединяет две таблицы по заданному ключу. Таблицы подаются скрипту на вход в виде файлов в формате CSV, имена файлов передаются скрипту через командную строку. Программа выдаёт результирующую таблицу в файл, имя которого указано параметром -o (--output). Ключом первой таблицы является столбец, номер которого указан в параметре --key1, второй – --key2. Скрипт проверяет, что для каждого значения ключа в таблице встречается не более одной строки, и если это предположение не выполнено, выдаёт сообщение об ошибке и прекращает работу. Объединение таблиц происходит по следующему правилу: для каждой строки первой таблицы, имеющей значение k в колонке ключа, в конец этой строки дописывается содержимое строки второй таблицы, имеющей значение k в колонке ключа. Столбцы колонок нумеруются с 1.

Пример использования программы. Положим, в файле blastout.csv лежит такой текст:

short-query,seq7871,100.00,101,0,0,1227,1327,1,101,1e-48,200
short-query,seq7696,100.00,101,0,0,191,291,1,101,1e-48,200
short-query,seq4438,100.00,101,0,0,290,390,101,1,1e-48,200
short-query,seq3681,100.00,101,0,0,1037,1137,1,101,1e-48,200
short-query,seq3155,100.00,101,0,0,1543,1643,1,101,1e-48,200

а в файле sequences.csv лежит текст:

seq3155,AGAAGAATTTTGCGGTATATGGATGATGAGAAGATCAACACTCTATTGACTGACGACCCATTAAGTACACCTCTGCACTTGGTCAAAATGCACGACTTGCG
seq3662,AAATCACCCAATTTTCTCCGCTTAAATGTTGAACAATAGTAATGACGTTGATCCTTAACCACAGAAATTATCGCGAGAAATGCCATTTTATAAAAAGATTC
seq3681,TGTCACGACCGATTGACATTCTCTATTTGGATACCACCTATTGCAAGTCTTAATACACTTTTCCATCCTAAGAAGTGGTTTTGGGCTAGATTTAATCTTTG
seq4438,CACGGTGTGAGAGTCAATACATGAATTGACGTGTTGAAGAGTCTTCTATTCATCCATACCAGCTAGAGATTAATTGCATACAGGGCATTCCACTGTCATTG
seq4982,ATACTCTGAACACTCGTCCTTTAATGATTTGAAAATGTTCGTACAAGGCCTCAATAATCAGGTAAAGTCTGCAGATGGTAGACCGGTGGGAGTACGTAAAA
seq7696,TTCTCTTCAAAAATTCTTTCGCTCTTTGTCTCCCGAACGAACGAAACAGTCAAAAACGTCACTTTATTGGAATCACATAAGCTACTCGTCTCATACATACA

То если мы запустим скрипт python join.py blastout.csv --key1 2 sequences.csv --key2 1 -o out.csv, то в файле out.csv должна оказаться такая таблица:

short-query,seq7871,100.00,101,0,0,1227,1327,1,101,1e-48,200
short-query,seq7696,100.00,101,0,0,191,291,1,101,1e-48,200,seq7696,TTCTCTTCAAAAATTCTTTCGCTCTTTGTCTCCCGAACGAACGAAACAGTCAAAAACGTCACTTTATTGGAATCACATAAGCTACTCGTCTCATACATACA
short-query,seq4438,100.00,101,0,0,290,390,101,1,1e-48,200,seq4438,CACGGTGTGAGAGTCAATACATGAATTGACGTGTTGAAGAGTCTTCTATTCATCCATACCAGCTAGAGATTAATTGCATACAGGGCATTCCACTGTCATTG
short-query,seq3681,100.00,101,0,0,1037,1137,1,101,1e-48,200,seq3681,TGTCACGACCGATTGACATTCTCTATTTGGATACCACCTATTGCAAGTCTTAATACACTTTTCCATCCTAAGAAGTGGTTTTGGGCTAGATTTAATCTTTG
short-query,seq3155,100.00,101,0,0,1543,1643,1,101,1e-48,200,seq3155,AGAAGAATTTTGCGGTATATGGATGATGAGAAGATCAACACTCTATTGACTGACGACCCATTAAGTACACCTCTGCACTTGGTCAAAATGCACGACTTGCG

Упражнения