Comment obtenir des fonctionnalités de gène au format FASTA NUCLEOTIDE de NCBI en utilisant Perl?
Question
Je suis capable de télécharger un fichier FASTA manuellement qui ressemble à:
>lcl|CR543861.1_gene_1...
ATGCTTTGGACA...
>lcl|CR543861.1_gene_2...
GTGCGACTAAAA...
En cliquant sur "Envoyer à" et sélectionnez "Fonctions GENE", FASTA NUCLEOTIDE est la seule option (qui va bien parce que c'est tout ce que je veux) sur Cette page .
avec un script comme celui-ci:
#!/usr/bin/env perl
use strict;
use warnings;
use Bio::DB::EUtilities;
my $factory = Bio::DB::EUtilities->new(-eutil => 'efetch',
-db => 'nucleotide',
-id => 'CR543861',
-rettype => 'fasta');
my $file = 'CR543861.fasta';
$factory->get_Response(-file => $file);
Je reçois un fichier qui ressemble à:
>gi|49529273|emb|CR543861.1| Acinetobacter sp. ADP1 complete genome
GATATTTTATCCACA...
avec toute la séquence génomique regroupée. Comment obtenir des informations comme dans le premier fichier (téléchargé manuellement)?
J'ai regardé deux autres postes:
- Comment télécharger une séquence complète du génome dans BiopyThon Enterz . Rechercher ( Cette réponse semblait pertinente )
- Comment puis-je télécharger l'intégralité du fichier Genbank avec juste un numéro d'accession?
La solution
Avec ce numéro d'adhésion et ce type de retour, vous obtenez la séquence complète du génome.Si vous souhaitez obtenir les séquences de gènes individuelles, indiquez que vous souhaitez le fichier Genbank complet, puis analyser les gènes.Voici un exemple:
#!/usr/bin/env perl
use 5.010;
use strict;
use warnings;
use Bio::SeqIO;
use Bio::DB::EUtilities;
my $factory = Bio::DB::EUtilities->new(-eutil => 'efetch',
-email => 'foo@bar.com',
-db => 'nucleotide',
-id => 'CR543861',
-rettype => 'gb');
my $file = 'CR543861.gb';
$factory->get_Response(-file => $file);
my @gene_features = grep { $_->primary_tag eq 'gene' }
Bio::SeqIO->new(-file => $file)->next_seq->get_SeqFeatures;
for my $feat_object (@gene_features) {
for my $tag ($feat_object->get_all_tags) {
# open a filehandle here for writing each to a separate file
say ">",$feat_object->get_tag_values($tag);
say $feat_object->spliced_seq->seq;
# close it!
}
}
Cela écrira chaque gène sur le même fichier (si vous redirrez-le, il vous écrit maintenant sur stdout) mais j'ai indiqué où vous pourriez faire une petite modification pour les écrire pour séparer les fichiers.L'analyse de Genbank peut être un peu délicate parfois, il est donc toujours utile de lire les docs et en particulier, l'excellent Annotation de fonctionnalité HOWTO .