Pesquisa de DNA – Interfaces de linha de comando com argparse

Procurando por pequenos segmentos de DNA

Stephen Fordham em Em direção a Data Science Follow Jul 13 · 5 min ler

Interfaces de linha de comando com argparse

Na bioinformática, muitas vezes é necessário executar nossos programas na linha de comando. Felizmente, o módulo argparse do Python – parte da biblioteca padrão torna isso fácil.

O Python possui uma coleção de bibliotecas úteis que facilitam a construção de interfaces de usuário. Normalmente, quando pensamos em interfaces de usuário, uma interface gráfica de pontos e cliques vem à mente. No entanto, uma interface de usuário é qualquer coisa que permite que um usuário interaja com seu programa, incluindo interfaces de linha de comando – o foco deste artigo.

Para introduzir argparse, eu irei construir um pequeno programa que procura por pequenos segmentos específicos de DNA especificados como entrada pelo usuário. Esses pequenos segmentos de DNA que o programa procurará são chamados de sites de enzimas de restrição, isto é, seqüências pequenas de Python com um comprimento entre 4 e 6 caracteres. Este programa irá procurar o genoma de bactérias para ver quantas vezes elas estão presentes!

Começando

O programa tem duas intenções claras:

  1. Seja informativo para o usuário, por exemplo, fornecendo mensagens úteis quando o programa falha.
  2. Seja flexível. O programa deve ser capaz de pesquisar qualquer DNA da escolha do usuário, alterando os argumentos da linha de comando.

Para começar, importe o módulo argparse e crie um objeto ArgumentParser:

Não é necessário, mas acho útil fornecer uma string descritiva usando o argumento keyword da descrição . Quando a ajuda é chamada na linha de comando mais tarde no programa, uma visão geral descritiva do programa python é fornecida. Isso pode ser útil, se houver vários usuários, e o tempo decorrido entre as execuções do programa.

Em seguida, dizemos ao objeto parser do argumento que argumentos esperar chamando o método add_argument () . Uma vez que todos os argumentos tenham sido adicionados, podemos dizer que vá em frente e analise os argumentos da linha de comando chamando o método parse_args () .

Três argumentos foram adicionados pelo método add_argument () . Além disso, vários outros parâmetros opcionais foram adicionados, como help =, type =, choice =, default = ect .

É nesse ponto que o módulo argarse realmente entra em ação.

Os argumentos curtos e longos são especificados com um único hífen (-) ou um hífen duplo (-) respectivamente. Isso significa que na linha de comando no terminal, quando o programa é executado, o argumento pode ser expresso de maneira abreviada, -i para o nome do arquivo de entrada ou como o modo de longhand, – input_filename para o nome do arquivo de entrada. Outro benefício dos argumentos curtos e longos é que eles podem ser expressos em qualquer ordem na linha de comando!

Argumentos curtos e longos em um arranjo mix e correspondido são mostrados abaixo.

Podemos melhorar ainda mais o texto de ajuda chamando add_argument () com o argumento da palavra-chave help. Quando o programa agora é executado sem argumentos de linha de comando, aparece um texto de ajuda útil para os três argumentos (destacados em amarelo):

Validação Personalizada

O parâmetro type = no método parser.add_argument aceita o nome de uma função Python

O parâmetro type refere-se a uma função, por exemplo, o – input_filename é verificado pela função chamada file_check. Esta função mostrada abaixo, verifica se o arquivo realmente existe.

Finalmente, os argumentos choice e nargs significam que o usuário pode escolher qualquer um dos elementos da lista de opções. Como o usuário pode escolher vários argumentos, os parâmetros nargs são necessários e um asterisco é especificado.

Finalmente, agora todos os argumentos foram adicionados e funções adicionadas para validação de entrada, um pequeno script pode ser escrito. Primeiro escrevo um pequeno dicionário, onde os nomes das enzimas de restrição são as chaves, são suas sequências correspondentes são seus valores.

Para completar, eu incluí os módulos necessários para este programa acima do dicionário restrictiton_enzyme_dict.

Os parâmetros especificados pelo usuário são prefixados com os argumentos seguidos pelo seu nome de entrada.

O arquivo DNA é aberto pela primeira vez e lido usando o método .read (). Depois disso, o (s) padrão (ões) especificado (s) pelo usuário são iterados e, para cada enzima de restrição, eu o acho valor usando o método .get (). A expressão regular re.findall localiza todas as ocorrências das sequências no DNA e anexa as sequências a uma lista de resultados.

A lista de resultados é convertida em um dicionário especial usando o método collection.Counter () que conta quantas vezes uma única seqüência é encontrada.

Para finalizar, este novo dicionário criado por collections.Counter chamado restriction_sites_dict pode ser iterado e se a sequência estiver acima de uma contagem especificada pelo usuário uma mensagem é impressa informando ao usuário quantas vezes ele foi encontrado e sua sequência.

Para ver o programa em ação, vamos executar alguns exemplos de teste!

Exemplo de saída é mostrado:

Aqui, procurei as três enzimas de restrição, -p HindIII, EcoRI e KpnI usando o flag p (o flag p corresponde ao padrão especificado pelo usuário). Na primeira execução, não especifiquei uma contagem. Anteriormente, no add_argument para count_no, defini um valor útil como 0.

Quando executo o programa novamente, com um limiar de contagem de 500, o programa me informa que o site HindIII está abaixo do limite de 500 que eu especifiquei.

Este programa está funcionando bem. Os resultados são retornados rapidamente e os sítios de enzimas de restrição dentro do genoma inteiro de E.coli foram pesquisados! Muito legal (este arquivo Fasta foi obtido do NCBI), mas em nossa linha de comando nós poderíamos escolher facilmente pesquisar outros genomas bacterianos, especificando seu respectivo nome de arquivo.

Para terminar, seria útil abordar uma intenção anterior. Especificamente, o programa foi projetado para ser flexível. O que acontece se os usuários adicionam uma enzima de restrição incorreta chamada por exemplo, FakeEnzyme?

Vamos executar o programa para descobrir.

Eu destaquei a mensagem de erro útil que aparece quando o usuário insere uma opção incorreta que solicita ao usuário que escolha na lista de seleção fornecida.

Resumo

Este breve tutorial mostrou como uma interface de linha de comando pode ser adicionada a um programa. Felizmente, o Python fornece bibliotecas úteis para construir interfaces, das quais argparse é uma delas.