[Biopython] Passing sequence to local BLAST

Peter Cock p.j.a.cock at googlemail.com
Thu Jul 7 10:43:22 UTC 2011


On Thu, Jul 7, 2011 at 11:26 AM, Sheila the angel
<from.d.putto at gmail.com> wrote:
> Hi All,
>
> I want to download genbank file from NCBI and pass the protein sequence
> directly to the local BLAST. But I am getting error in BLAST step
> #-------------------------------------------------------------------------------------------
> from Bio import SeqIO
> from Bio import Entrez
> from Bio.Blast.Applications import NcbiblastpCommandline
> id='200203'
> handle = Entrez.efetch(db="protein", id=id, rettype="gp")
> seq_record = SeqIO.read(handle, "gb")
> x=seq_record.seq                                            #getting the
> sequence in a variable x
> blastp_cline = NcbiblastpCommandline(query=x, db="protein_database",
> evalue=0.001)    # My BLAST command
> result_handle, stderr = blastp_cline()                    #Running BLAST and
> getting error :(
>
> #-------------------------------------------------------------------------------------------
>
> At this last step I am getting error.....
> I sort-of understand the problem.....it is taking value of x as a file name
> while its a variable which contains the sequence.
> Is there any way out to this problem without making temporary file.

With the standalone blast tools you generally need to prepare an input
FASTA file with your query sequence(s).

However, in principle you can give the input filename as - (default),
and instead pipe the query FASTA record in as stdin (standard input).
Try something like this (untested):

...
blastp_cline = NcbiblastpCommandline(query="-", db="protein_database",
evalue=0.001)
stdout, stderr = blastp_cline(stdin=seq_record.format("fasta"))

Peter




More information about the Biopython mailing list