
ФББ 2013-2014
Сначала импортируем модуль sys, позволяющий работать с командной строкой.
#!/usr/bin/env python # encoding: UTF-8 import sys
Проверяем, чтобы пользователь ввёл все необходимые аргументы.
argc = len(sys.argv)
if (argc != 3):
sys.stderr.write("Incorrect number of arguments!\n")
sys.stderr.write("Arguments expected: 2\n")
sys.stderr.write("Arguments received: %d\n" % argc)
exit(1)
В переменную lines записывается список из строк открытого файла. Список из строк создаётся генератором списков: конструкцией [for line in srcstream].
В lines_cds - список из строк прочитанного файла, начинающиеся с "СDS ". В них содержится нужная нам информация для составления таблицы.
srcname = sys.argv[1]
destname = sys.argv[2]
srcstream = open(srcname, "r")
lines = [line.strip() for line in srcstream]
lines_cds = [line for line in lines if (line.startswith("CDS "))]
srcstream.close()
Приравниваем значение переменной lines к lines_cds для удобства. Наконец, запишем в файл с именем, заданным пользователем, таблицу, содержащую в первом стобце - начало гена, во втором - конец гена, в третьем - ориентацию (1 или -1). Чтобы сделать это, я применяю методы строки: .replace - замена одного символа другим, .split - разделение строки по заданным символам. Разные столбцы мы разделяем знаком табуляции.
lines = lines_cds
deststream = open(destname, "w")
for line in lines:
coords = line.split(" ")[-1]
complement = [1, -1][coords.startswith("complement(")]
coords = coords.replace("complement(", "")
coords = coords.replace(")", "")
parts = coords.split("..")
deststream.write(parts[0] + "\t")
deststream.write(parts[1] + "\t")
deststream.write("%d" % complement)
deststream.write("\n")
print sys.argv[0]