[Biopython-dev] Basic python question with regard to Unigene parser

Jim Balhoff james.balhoff at duke.edu
Thu Oct 26 09:46:34 EDT 2006


Hi Sean,

On Oct 26, 2006, at 8:30 AM, Sean Davis wrote:

> On Thursday 26 October 2006 08:09, Sean Davis wrote:
>> Let me start off by saying that I am a python newbie after working  
>> in perl
>> for the last few years.  I am working on a Unigene flat file  
>> parser.  In my
>> scanner, I have a construct that looks like:
>>
>>         for line in handle:
>>             tag = line.split(' ')[0]
>>             line = line.rstrip()
>>             if tag=='ID':
>>                 consumer.ID(line)
>>             if tag=='GENE':
>>                 consumer.GENE(line)
>>             if tag=='TITLE':
>>                 consumer.TITLE(line)
>>             if tag=='EXPRESS':
>>                 consumer.EXPRESS(line)
>>             ....
>>
>> Since I am setting things up so that there is a 1:1 correspondence  
>> between
>> the "tag" and the consumer method, is there an easy way to reduce  
>> this long
>> set of IF statements to a simple mapping procedure that maps a tag  
>> to the
>> correct method?
>>
>> Sorry for the naive question....
>
> Even more apologies.  I answered my own question.  Something like  
> this seems
> to work:
>
> 	exec('consumer.'+tag+'(line)')
>
> which replaces all the IF statements quite nicely.

Alternatively, you may want to look at getattr().  There is a good  
description here:

<http://diveintopython.org/power_of_introspection/getattr.html#d0e9362>

Jim



More information about the Biopython-dev mailing list