Questão:
Existe alguma maneira de usar biopython para escrever arquivos Swissprot?
James
2017-06-29 13:58:04 UTC
view on stackexchange narkive permalink

Tenho o seguinte mwe para filtrar um arquivo Swissprot com base em um determinado recurso, neste caso, regiões transmembrana.

  from Bio import SeqIOrecords = [] para registro em SeqIO.parse ("Input.txt", "swiss"): transmembrane_protein = Impressão falsa record.id para i, característica em enumerar (registro .features): if feature.type == "TRANSMEM": transmembrane_protein = True se transmembrane_protein == True: records.append (record) SeqIO.write (records, "Output.txt", "swiss")  

O script funciona quando SeqIO.write (records, "Output.txt", "swiss") torna-se SeqIO.write (records, "Output.txt", " fasta ")

No entanto, esse método ainda não é suportado.

  ValueError: O formato de leitura 'suíço' é compatível, mas não há suporte para escrita  

Pelos documentos, vejo que escrita não é compatível com suíço:

Observe que, embora Bio.SeqIO possa ler todos os formatos de arquivo acima, ele não pode gravar em todos eles.

Existe alguma forma não oficial de usar biopython / python para escrever arquivos swissprot a partir de arquivos swissprot analisados?

Eu li que "SeqIO não pode produzir o formato de arquivo (por exemplo, o formato de texto simples SwissProt," suíço ")". Mas você pode colar as proteínas sem usar Biopython, uma vez que você sabe a id dos recursos que deseja
Deve estar em algum dos documentos em algum lugar, tenho certeza, só não vi explicitamente declarado, mas está apontado no tratamento de erros, então é bom o suficiente para eu saber que não existe um caminho fácil. Estou lidando com vários proteomas. A colagem manual não seria divertida;) Eu realmente gostaria de uma solução programática.
Você pode usar grep ou awk para selecionar os registros e gerá-los em outro arquivo usando um pipe.
@Llopis Isso certamente seria um caminho a seguir. No entanto, eu gostaria de manter o script em um único arquivo python porque é multiplataforma e transportável.
Dois respostas:
sjcockell
2017-06-29 16:14:06 UTC
view on stackexchange narkive permalink

Usar SeqIO.index em vez de SeqIO.parse permite ler todos os registros em um dict , do qual você pode extrair o entrada bruta:

  from Bio import SeqIOrecord_dict = SeqIO.index ('Input.txt', 'swiss') para a chave em record_dict: print (record_dict .get_raw (key) .decode ())  

Agora você deve ser capaz de aplicar seu teste para uma proteína transmembrana a cada entrada e escrever apenas aquelas que deseja manter.

  do Bio import SeqIOrecord_dict = SeqIO.index ('Input.txt', 'swiss') out = open ('Output.txt', 'wb ') para a chave em record_dict: record = record_dict [chave] para i, recurso em enumerar (record.features): if feature.type == "TRANSMEM": out.write (record_dict.get_raw (key) .decode ())  
Solução perfeita, funcionou como um encanto.
terdon
2017-06-29 16:26:36 UTC
view on stackexchange narkive permalink

Não sei como fazer isso com biopython, mas é bastante simples em Perl usando Swisskinfe:

  #! / usr / bin / env perluse strict; use warnings; use SWISS :: Entry; my $ flat = $ ARGV [0] || die ("Precisa de um arquivo simples \ n"); ## Alterar o término da linha string, então lemos uma entrada ## inteira em um timelocal $ / = "\ n // \ n"; my $ fh; ## Lidar com arquivos compactados ou descompactadosif ($ flat = ~ / \. gz $ /) {abrir ($ fh, "zcat $ flat |") || die ("não é possível abrir o arquivo simples $ flat: $! \ n");} else {open ($ fh, "$ flat") || die ("não é possível abrir o arquivo simples $ flat: $ !: $ @ \ n");} ## Analisa o arquivo. entrada: while (my $ current_entry = < $ fh>) {## Ler a entrada atual como um objeto "entry" my $ entry = SWISS :: Entry->fromText ($ current_entry); ## Iterar sobre os recursos da entrada para cada meu $ recurso ($ entry->FTs->elements ()) {## Se qualquer um dos recursos for 'TRANSMEM', imprima a entrada if ($ feature-> [0] eq 'TRANSMEM' ) {imprimir "$ current_entry \ n"; ## Pula para a próxima entrada próxima entrada; }}}  

Você precisa instalar o módulo Swissknife primeiro:

  1. Baixe Swissknife_1.73.tar.gz aqui (link SourceForge).

  2. Instalar

      tar xvzf Swissknife.tar.gzcd Swissknife_1.73 / perl Makefile.PLsudo make install 

Agora, torne o script acima executável e execute com:

  foo.pl file.flat  


Estas perguntas e respostas foram traduzidas automaticamente do idioma inglês.O conteúdo original está disponível em stackexchange, que agradecemos pela licença cc by-sa 3.0 sob a qual é distribuído.
Loading...