Dear all,

I have a problem with Biopython. 

I give it a fasta-sequence and need to make either reversed fasta sequence out of it in a separate output file, or just complement fasta-sequence in a separate output file.

The four lines below were taken from Biopython cookbook, and the script works perfectly well.

    from Bio import SeqIO
    
    records = (rec.reverse_complement(id="rc_"+rec.id, description = "reverse complement") \
    
    for rec in SeqIO.parse("example.fasta", "fasta") if len(rec)<700)
    
    SeqIO.write(records, "rev_comp.fasta", "fasta")

18

But my goal is fasta-file with just complement to the initial sequence, or reverse sequence to the initial fasta sequence.

So far I have not found any way to get them in Biopython.

I can open final rev_comp.fasta, copy the sequence itself, do something like that:  

my_seq[::-1] and print the result to a new fasta-file, it will give me just complement sequence.

But it won't be a pure Biopython application, and a little bit more complicated with reverse sequence only.

Is there any simple way to do it in Biopython only?  Actually I don't need reverse complement sequence at all, 
just either reverse or complement fasta sequences for my initial fasta-sequence.

Thank you very much!

Natasha


Here you go:

**USAGE: python  complement.py -i input_fasta -o output_fasta**

    from Bio import SeqIO
    import getopt, sys
    

    
    def usage():
        print "Usage: complement.py -i <input_fasta> -o <output_fasta>"
    
    
    try:
        options, remainder=getopt.getopt(sys.argv[1:], 'i:o:h')
    
    except getopt.GetoptError as err:
        print str(err)
        usage()
        sys.exit()
    
    for opt, arg in options:
        if opt in ('-i'):
            input_file=arg
        if opt in ('-h'):
            usage()
    	sys.exit()
        elif opt in ('-o'):
            output_file=arg
    
    
    out=open(output_file, 'w')
    
    for record in SeqIO.parse(input_file, "fasta"):
        out.write( ">"+record.id+"\n"+str(record.seq.complement())+"\n" )
    out.close()

Let me know if it works & don't forget to upvote ;)