Синтаксический анализ конкретной строки из заголовка из файла fasta

#python #bioinformatics #biopython #fasta

#python #биоинформатика #biopython #fasta

Вопрос:

Я ищу, чтобы получить имя организма из файла заголовка fasta, где меня интересует из описания для извлечения, когда OS = (Имя организма).

ЗАГОЛОВОК FASTA

 >sp|Q8T8B9|ACMSD_CAEEL 2-amino-3-carboxymuconate-6-semialdehyde decarboxylase OS=Caenorhabditis elegans GN=acsd-1 PE=2 SV=1
MPICEFSATSKSRKIDVHAHVLPKNIPDFQEKFGYPGFVRLDHKEDGTTHMVKDGKLFRV
VEPNCFDTETRIADMNRANVNVQCLSTVPVMFSYWAKPADTEIVARFVNDDLLAECQKFP
GKEHIVLGTDYPFPLGEL
EVGRVVEEYKPFSAKDREDLLWKNAVKMLDIDENLLFNKDF
>sp|P34455|ACON_CAEEL Probable aconitate hydratase, mitochondrial OS=Caenorhabditis elegans GN=aco-2 PE=3 SV=2
MNSLLRLSHLAGPAHYRALHSSSSIWSKVAISKFEPKSYLPYEKLSQTVKIVKDRLKRPL
TLSEKILYGHLDQPKTQDIERGVSYLRLRPDRVAMQDATAQMAMLQFISSGLPKTAVPST
IHCDHLIEAQKGGAQDLARAKDLNKEVFNFLATAGSKYGVGFWKPGSGIIHQIILENYAF
  

Код для получения FastaHeader

 from Bio import SeqIO
import re
import pandas as pd


input_file = "ANIMAL.fasta" 

fasta_sequences = SeqIO.parse(open(input_file),'fasta')
for fasta in fasta_sequences:
    fasta_id, sequence = fasta.id, str(fasta.seq)
    print(fasta.description)
  

Текущий вывод:

 >sp|Q8T8B9|ACMSD_CAEEL 2-amino-3-carboxymuconate-6-semialdehyde decarboxylase OS=Caenorhabditis elegans GN=acsd-1 PE=2 SV=1

>sp|P34455|ACON_CAEEL Probable aconitate hydratase, mitochondrial OS=Caenorhabditis elegans GN=aco-2 PE=3 SV=2
  

Желаемый результат:

 Caenorhabditis elegans
Caenorhabditis elegans
  

Комментарии:

1. вы пробовали регулярное выражение?

2. перекрестное сообщение: biostars.org/p/461697

Ответ №1:

Вы можете искать свою информацию с помощью регулярного выражения:

 import re
example = "sp|P34455|ACON_CAEEL Probable aconitate hydratase, mitochondrial OS=Caenorhabditis elegans GN=aco-2 PE=3 SV=2"

start = re.search("OS", example).start()
result = example[start 3:].split("GN")[0].strip()
print(result)
>> Caenorhabditis elegans
  

Этот код ищет текст после «OS =» до «GN» и удаляет пробелы в конце

Комментарии:

1. очень хороший подход, спасибо @yannick! 🙂 .start() просто возвращает индексы начальной позиции, где строка «OS» верна?