Kodomo

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

Работа с файлами

Конспект

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

Заготовка программы

   1 #!/usr/bin/python
   2 """A script for doing STUFF.
   3 
   4 STUFF is just something I made up right now.
   5 """
   6 import optparse
   7 import doctest
   8 import sys
   9 # import'ы модулей (если нужно)
  10 
  11 # определения констант (если нужно)
  12 
  13 # определения функций (если нужно)
  14 
  15 # определения классов (если нужно)
  16 
  17 if __name__ == "__main__":
  18     parser = optparse.OptionParser(description=__doc__)
  19     parser.add_option("-x", "--quantity",
  20         help="Quantity of STUFF")
  21     # ... --quantity -- это пример;
  22     # его можно стереть и написать своих параметров по его образу и подобию
  23     parser.add_option("-v", "--verbose", action="store_true",
  24         help="Be more noisy")
  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(verbose=options.verbose)
  31         print "%s failed of %s tests" % (failed, tests)
  32         sys.exit(failed != 0)
  33 
  34     # основные команды скрипта (лучше всего, вызов головной функции)

Задание

Задание крайне важное, но не сложное. Если вы не успеете выполнить его к 20-му числу, у вас есть хорошие шансы не получить зачёт (не потому, что я такой злой, а по опыту).

  1. Договоритесь, к какой команде вы принадлежите. К вашей команде должно принадлежать 2 – 5 человек. (1 человек – не годится; 6 и более – замучаетесь сами и меня замучаете).

  2. Сочините для себя зачётное задание соразмерно вашим способностям и вашим интересам. Если ничего не приходит в голову, выберите какое-нибудь из предложенных мной или посоветуйтесь со мной.
  3. Напишите для зачётного задания ТЗ.
  4. Напишите для зачётного задания план реализации.

На странице ../Projects лежит список заданий, которые я сочинил, вдохновляющие мысли о том, как писать ТЗ и план реализации, требования к зачёту.

ТЗ и план реализации должны быть написаны на вики, в соответствующей подстранице страницы ../Projects. (Для тех, кто пропустил рассказ про вики, в этом всё равно нет ничего сложного, и я помогу).

В этом семестре я готов взять на себя почти всю работу менеджера проекта (помочь составить ТЗ и план реализации), но инициатива должна исходить от вас.

Советую обращаться ко мне за помощью в самом начале. Я почти всегда обитаю в к. 321 корпуса "А" после двух часов дня.

Упражнения

Упражнения выполнять не обязательно для зачёта, но полезно, чтобы все нужные навыки уложились в голову. Выбирайте любые упражнения: какие вам проще или какие интереснее, или никакие вообще. И, разумеется, решайте упражнения в любом порядке.

Результаты решения упражнений должны оказываться в вашем репозитории. (И более того, в его копии на сервере).

Упражнения, помеченные (*), сложнее.

    1. Напишите скрипт sum.py, который получает с командной строки имя файла, в котором записаны числа, по одному числу на строку, и распечатывает их сумму.

    2. (*) Сделайте так, чтобы этот скрипт работал в духе старых утилит UNIX, а именно:
      • если ему не дали аргументов, он ожидает содержимое файла со стандартного ввода;
      • если ему дали несколько аргументов, он суммирует содержимое каждого из файлов, данных в аргументах;
      • если в качестве очередного имени аргумента ему дали "-", он ожидает в этом месте содержимое файла со стандартного ввода
  1. Напишите скрипт cat.py, который пишет на стандартный вывод всё то, что ему пишут на стандартный ввод

    1. Напишите скрипт tac.py, который получает с командной строки имя файла, и распечатывает строки этого файла в обратном порядке

    2. (*) Сделайте так, чтобы этот скрипт работал в духе старых утилит UNIX (аналогично 1.b)
    1. Напишите скрипт fixblast.py, который получает с командной строки имя файла, содержащего выдачу blast с параметром -m9 (т.е. с большим количеством лишних строк, начинающихся с #); скрипт печатает на стандартный вывод содержимое этого файла с одной строкой заголовка в начале (т.е. находит первый содержательный заголовок и печатает его, затем печатает все строки, не начинающиеся с #)

    2. Доделайте (упростите) этот скрипт так, чтобы он выдавал текст с одной строкой заголовка, получая на вход выдачу blast с одной строкой заголовка

    3. Аналогично 1.b и 3.b