Local Blast empty xml file python

640 views Asked by At

I am trying to implement a little script in order to automatize a local blast alignment. I had ran commands in the terminal en it works perfectly. However when I try to automatize this, I have a message like : Empty XML file. Do we have to implement a "system" waiting time to let the file be written, or I did something wrong?

The code :

#sequence identifier as key, sequence as value.
for element in dictionnaryOfSequence:
    #I make a little temporary fasta file because the blast command need a fasta file as input.
    out_fasta = open("tmp.fasta", 'w')
    query = ">" + element + "\n" + str(dictionnary[element])
    out_fasta.write(query) # And I have this file with my sequence correctly filled
    OUT_FASTA.CLOSE() # EDIT : It was out of my loop....

    #Now the blast command, which works well in the terminal, I have my tmp.xml file well filled.
    os.system("blastn -db reads.fasta -query tmp.fasta -out tmp.xml -outfmt 5 -max_target_seqs 5000")

    #Parsing of the xml file. 
    handle = open("tmp.xml", 'r')
    blast_records = NCBIXML.read(handle)
    print blast_records

I have an Error : Your XML file was empty, and the blast_records object doesn't exist. Did I make something wrong with handles?

I take all advice. Thank you a lot for your ideas and help.

EDIT : Problem solved, sorry for the useless question. I did wrong with handle and I did not open the file in the right location. Same thing with the closing. Sorry.

1

There are 1 answers

2
Evgeny Ivanov On

try to open the file "tmp.xml" in Internet explorer. All tags are closed?