Este conteúdo faz parte do livro “Introdução à Programação para Bioinformática com Biopython“. Você pode adquirir a versão impressa desse livro aqui ou a versão para Kindle aqui. Para nos citar, consulte este link.
Além do pacote Bio.Seq, Biopython também fornece o pacote Bio.SeqIO para leitura e gravação de sequências, com suporte para os formatos: abi, ace, clustal, embl, fasta, fastq, fastq-solexa, fastq-illumina, genbank ou gb, ig, imgt, nexus, phd, phylip, pir, seqxml, sff, stockholm, swiss, tab, qual e uniprot-xml.
Neste capítulo abordaremos técnicas para manipulação de sequências usando Biopython e até mesmo funções básicas do Python.
Concatenando sequências
Você pode unir sequências usando as funcionalidades do Python. Neste exemplo, uniremos quatro sequências de nucleotídeos e armazenaremos o resultado final na variável seq_final.
from Bio.Seq import Seq
seq1 = Seq('AAA')
seq2 = Seq('TTT')
seq3 = Seq('CCC')
seq4 = Seq('GGG')
seq_final = seq1 + seq2 + seq3 + seq4
print(seq_final)
# AAATTTCCCGGG
Comparando sequências
Usando comandos condicionais e operadores é possível realizar comparações entre sequências.
from Bio.Seq import Seq
seq1 = Seq("AACCGGTT")
seq2 = Seq("AACCGGTT")
seq3 = Seq("TTCCAAGG")
if str(seq1) == str(seq2):
print("seq1 igual a seq2")
else:
print("seq1 diferente de seq2")
if str(seq1) == str(seq3):
print("seq1 igual de seq3")
else:
print("seq1 diferente de seq3")
Nesse exemplo, a sequência seq1 é inicialmente comparada com seq2. Em seguida, é feita uma comparação de seq1 com seq3. Ao executar esse script, você obterá como resultado: “seq1 igual a seq2” e “seq1 diferente de seq3”.
Para realizar comparações entre sequências é necessário comparar diretamente as strings, sendo necessário usar a função str( ). Observe que é considerado uma boa prática inserir um comando else, após o if para que, caso a condição não seja cumprida, uma mensagem avise ao usuário.
Analisando arquivos no formato FASTA
O formato de arquivos FASTA é um dos mais comuns padrões de armazenamento de sequências biológicas em Bioinformática. O padrão é definido por um cabeçalho iniciado pelo caractere “>”, seguido por uma sequência de aminoácidos ou nucleotídeos nas linhas posteriores. O arquivo pode também apresentar múltiplas sequências (formato Multi-FASTA). Abaixo um exemplo de arquivo no formato FASTA.
>HEAD_SEQ
GTCACAGCATCGATCGATCGACACTAG
CATCGATCGATCGATCATCGATCACTA
GCATCGATCGATCGATCGATCATC
Crie um arquivo de texto com estrutura similar ao demonstrado acima. Lembre-se o cabeçalho deve começar com o caractere “>” e a sequência deve começar na linha abaixo a ele. Salve o arquivo com o título “arquivo.fasta“. Você também pode encontrar esse arquivo no diretório exemplos do repositório do GitHub com os arquivos deste livro: <https://github.com/dcbmariano/biopython>.
Agora vamos analisá-lo com o Biopython:
from Bio import SeqIO
for i in SeqIO.parse("arquivo.fasta", "fasta"):
# imprime o cabecalho
print(i.id)
# imprime a sequencia
print(i.seq)
# imprime o tamanho da sequencia
print(len(i))
Após executar esse código você verá impresso na tela:
HEAD_SEQ
GTCACAGCATCGATCGATCGACACTA
GCATCGATCGATCGATCATCGATCACT
AGCATCGATCGATCGATCGATCATC
79
A função SeqIO.parse( ) é a principal função do pacote Bio.SeqIO. No exemplo acima, ela permite a leitura de um arquivo FASTA e, a partir de um laço, armazena na variável i o objeto que lê informações do arquivo, como: cabeçalhos, sequências e tamanho (com o auxílio da função len).
Gravando sequências
Agora vamos ler arquivos no formato FASTA, extrair determinadas sequências que atendam algum requisito específico e gravar tais linhas em outro arquivo, também no formato FASTA.
Inicialmente crie um arquivo Multi-FASTA chamado “arquivo1.fasta” com o conteúdo abaixo:
>sequencia_1
GTCACAG
>sequencia_2
GTGTTGTGTGT
>sequencia_3
CTCAAACCCAT
>sequencia_4
AACCCATTTTTTT
>sequencia_5
CCCCAAACCCAAATTT
Agora vamos analisar esse arquivo e extrair apenas sequências que atendam a duas condições:
- sejam maiores do que 10 pb;
- iniciem com uma citosina.
from Bio import SeqIO
entrada = open("arquivo1.fasta","r")
saida = open("arquivo2.fasta", "w")
for i in SeqIO.parse(entrada,"fasta"):
# Condicao 1 (> 10 pb) | Condicao 2 == 'C'
if ( (len(i.seq) > 10) and (i.seq[0] == 'C')):
SeqIO.write(i, saida, "fasta")
saida.close()
Observe que no código acima o arquivo FASTA foi lido através da função open( ) e armazenado na variável entrada. Essa variável foi aplicada como parâmetro na função SeqIO.parse( ). As condições 1 e 2 foram validadas através de um comando if e unidas através do operador lógico and. Observe que parênteses separam e organizam as a instruções condicionais.
O comando SeqIO.write( ) recebe como argumentos o objeto Seq armazenado em i, a variável que armazena o arquivo de saída e o formato a qual o arquivo será salvo. Por fim, ele imprime as sequências que atendam as condições pré-estabelecidas dentro do arquivo criado e armazenado na variável saida.
Ao executar o código, você obterá como resultados que atendem aos requisitos solicitados apenas as sequências 3 e 5.
>sequencia_3
CTCAAACCCAT
>sequencia_5
CCCCAAACCCAAATTT
Analisando arquivos no formato GenBank
O GenBank é um banco de dados público mantido pelo National Center for Biotechnology Information (NCBI). O formato de arquivos GenBank engloba informações de sequências de nucleotídeos e sua tradução em aminoácidos, mantendo informações de anotações de proteínas, regiões codificantes em geral de um determinado organismo.
No próximo exemplo, utilizaremos o arquivo GenBank do plasmídeo pREB9 obtido em Acaryochloris marina MBIC11017. Faça o download do arquivo “NC_009934.gbk” no diretório exemplos do repositório do livro no GitHub. Observe que há diversas informações que variam desde o nome do organismo até mesmo os nomes dos autores envolvidos em uma publicação de um artigo sobre esse organismo. Agora vamos analisá-lo com a função parse do pacote SeqIO.
from Bio import SeqIO
for seq_record in SeqIO.parse("NC_009934.gbk", "genbank"):
# imprime o cabecalho
print(seq_record.id)
# imprime a sequencia
print(seq_record.seq)
# imprime o tamanho da sequencia
print(len(seq_record) )
Assim como na análise de arquivos FASTA, ao executa os comandos acima em um script, você obterá informações como id, sequência e tamanho.
Obtendo o nome de produtos codificados de um arquivo GenBank
Arquivos GenBank contém informações de anotações, como por exemplo, nomes e posicionamento de genes. É possível obtê-los através do módulo SeqIO.
from Bio import SeqIO
# Recebendo arquivo GBK
exemplo = SeqIO.read("NC_009934.gbk", "genbank")
for i in exemplo.features:
print(i)
O exemplo acima imprime na tela todas as features (campos onde são armazenadas algumas características do organismo) de um arquivo GenBank. Se quisermos obter o nome de produtos codificados podemos utilizar a seguinte sintaxe:
from Bio import SeqIO
# Recebendo arquivo GBK
exemplo = SeqIO.read("NC_009934.gbk", "genbank")
for i in exemplo.features:
if i.type == 'CDS':
print(i.qualifiers['product'] )
Observe que inicialmente validamos se a feature é do tipo “CDS”. Informações sobre nomes de produtos estão armazenadas em features do tipo “CDS”, assim caso tente imprimir o campo onde estão armazenados os nomes de produtos sem essa validação seu programa apresentará um erro de execução. É necessário que o campo qualifiers[‘product’] exista na feature para que não ocorram erros durante a execução do laço.
Se você executou com perfeição os procedimentos descritos acima, obterá como resultado:
['hypothetical protein']
['hypothetical protein']
['hypothetical protein']
['hypothetical protein']
Você também poderá imprimir outras informações de features, como por exemplo: tipo (type), localização (location), além de locus tag (qualifiers[‘locus_tag’]), id da proteína (qualifiers[protein_id]) e sequência traduzida (qualifiers[‘translation’]).
Convertendo arquivos GenBank para FASTA
Biopython permite a conversão de formatos de arquivos de maneira simples. Usando o arquivo baixado anteriormente, vamos convertê-lo para formato FASTA através da função SeqIO.convert( ). Essa função recebe como parâmetros o nome do arquivo que será convertido, o formato desse arquivo, o novo nome após a conversão e o novo formato.
from Bio import SeqIO
SeqIO.convert("NC_009934.gbk", "genbank", \
"NC_009934.fasta", "fasta")
Para mais informações sobre o módulo Bio.SeqIO acesse: <http://biopython.org/wiki/SeqIO>.
Quer aprender mais? Conheça nossos cursos profissionalizantes à partir de R$19,99:

Capítulo 1
Introdução ao Python
Capítulo 2
Comandos condicionais
Capítulo 3
Laços de repetição
Capítulo 4
Trabalhando com strings
Capítulo 5
Listas
Capítulo 6
Manipulando arquivos
Capítulo 7
Funções
Capítulo 8
Princípios da orientação a objetos
Capítulo 9
Introdução ao Biopython
Capítulo 10
Sequências
Capítulo 11
BLAST
Capítulo 12
PDB
Capítulo 13
Visualização de dados em Python
Capítulo 14
Outras coisas interessantes que se pode fazer com Biopython
Capítulo 15
Hierarquia do Biopython
Por favor, nos cite:
MARIANO, D. C. B.; BARROSO, J. R. P. M. ; CORREIA, T. S. ; de MELO-MINARDI, R. C. . Introdução à Programação para Bioinformática com Biopython. 3. ed. North Charleston, SC (EUA): CreateSpace Independent Publishing Platform, 2015. v. 1. 230p .