У меня есть несколько файлов fasta в каталоге. Мне нужно создать текстовый файл с определенным форматированием для каждого отдельного файла fasta. Полученный текстовый файл будет использоваться в качестве входного файла для другой программы ниже по потоку. Я новичок в Python, и я уверен, что мой сценарий ниже примерно так же неуклюже, как они приходят. Я уверен, что есть лучший способ выполнить эту задачу в biopython.
import os
import re
for FILE in os.listdir():
if FILE.endswith(".fasta"):
OUTPUT = open(FILE+".lft",'w')
with open(FILE, 'r') as FIN:
for LINE in FIN:
if LINE.startswith('>'):
HEADER = re.sub('>','',LINE)
HEADER2 = re.sub('\n','',HEADER)
PART1_HEADER = HEADER2.split(":")
CONTIG = str(PART1_HEADER[0])
PART2_HEADER = PART1_HEADER[1]
SPLIT_PART2 = PART2_HEADER.split("-")
START = int(SPLIT_PART2[0])
END = int(SPLIT_PART2[1])
LENGTH = END-START
OUTPUT.write(str(START) + '\t' + str(HEADER2) + '\t' + str(LENGTH) + '\t' + str(CONTIG) + '\t' + str(END) + '\n')
Вот пример заголовков в каждом из файлов fasta:
>Spp-0:0-500
>Spp-1:0-3538
>Spp-2:0-1421
>Spp-3:0-500
Где:
"Spp" = название вида
"- 0" = идентификатор последовательности в фасте
": 0-500" = начальная и конечная позиции последовательности (невсе начинаются с нуля).
Я хочу сгенерировать текстовый файл, который выглядит следующим образом:
0 aVan-0:0-500 500 aVan-0 500
0 aVan-1:0-3538 3538 aVan-1 3538
0 aVan-2:0-1421 1421 aVan-2 1421
0 aVan-3:0-500 500 aVan-3 500
1st column: start position
2nd column: original header
3rd column: end position
4th column: everything before the ":"
5th column: the length between start & stop positions
Мой код работает довольно хорошо, но если у меня 25 быстрыхпоследовательности в каталоге, мой код будет обрабатывать только первые 24. Он также выводит на экран кучу чисел (обычно это 41 или 44 ... не знаю почему?), и я тоже хочу избавиться от этого.