Разберите файл последовательности fasta, чтобы получить заголовок и последовательность в Python

Мне нужно сделать общий синтаксический анализатор для разбора файлов fasta с использованием Python.

Формат такой:

>gi|348686675|gb|JH159151.1| Phytophthora sojae unplaced genomic scaffold PHYSOscaffold_1, whole genome shotgun sequence  
    TACGAGAATAATTTCTCATCATCCAGCTTTAACACAAAATTCGCA

>gi|348686675|gb|JH159151.1| Phytophthora sojae unplaced genomic scaffold PHYSOscaffold_2, whole genome shotgun sequence
CAGTTTTCGTTAAGAGAACTTAACATTTTCTTATGACGTAAATGA
AGTTTATATATAAATTTCCTTTTTATTGGA

>gi|348686675|gb|JH159151.1| Phytophthora sojae unplaced genomic scaffold PHYSOscaffold_3, whole genome shotgun sequence
GAACTTAACATTTTCTTATGACGTAAATGAAGTTTATATATAAATTTCCTTTTTATTGGA
TAATATGCCTATGCCGCATAATTTTTATATCTTTCTCCTAACAAAACATTCGCTTGTAAA

Мне нужно получить каждый заголовок и последовательность отдельно и вставить значения в мою созданную базу данных MySQL.

eg: title1 = PHYSOscaffold_1
    sequence2 = TACGAGAATAATTTCTCATCATCCAGCTTTAACACAAAATTCGCA
    title2 = PHYSOscaffold_2
    sequence1 = CAGTTTTCGTTAAGAGAACTTAACATTTTCTTATGACGTAAATGA AGTTTATATATAAATTTCCTTTTTATTGGA

и так далее... Я вставляю эти значения в таблицу MySQL.

Результат моего синтаксического анализа должен быть таким:

name1 \t sequence1 \t length_of_sequence \t a_count \t t_count \t g_count \t c_count

name2 \t sequence2 \t length_of_sequence \t a_count \t t_count \t g_count \t c_count

До сих пор я написал очень простой скрипт, подобный этому:

infile = open("simple.fasta")
line = infile.readline()
if not line.startswith(">"):
raise TypeError("Not a FASTA file: %r" % line)
title = line
sequence_lines = []
while 1:
  line = infile.readline().rstrip()
  if line == "":
    break
  sequence_lines.append(line)

Я получаю только свою первую последовательность и заголовок.

Я новичок и мне нужна помощь специалиста.


person aki2all    schedule 25.05.2013    source источник
comment
Есть ли какая-то конкретная причина, по которой вы не используете подпрограммы в SeqIO от BioPython?   -  person chthonicdaemon    schedule 25.05.2013
comment
возможный дубликат анализа файла fasta с использованием генератора ( python )   -  person Burhan Khalid    schedule 25.05.2013
comment
Я не могу использовать модуль Biopython из-за строгих инструкций моего руководства. @chthonicdaemon   -  person aki2all    schedule 25.05.2013


Ответы (1)


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

if line == "":
    break

Он сломается после первой последовательности. Используя readline(), невозможно определить конец файла, так как он просто вернет ''.

Это неэлегантное решение проблемы:

infile = open("simple.fasta")
# State variable so we can handle the start of the file properly
# There are probably much better ways to do this.
start = True

# Its much better to iterate over the lines than to use a while 1 loop.
for line in infile.readlines():
    if line.startswith(">"):
        if start:
            start = False
        else:
            # Each time we get here we have complete information for a read
            # You can then store that read in your database.
        sequence_lines = []
        title = line
    else:
        if start:
            raise TypeError("Not a FASTA file: %r" % line)
            start = FALSE
        sequence_lines.append(line)
person Scott Ritchie    schedule 25.05.2013