Iterating command switches from a data file - have a working solution but it seems inefficient
James Stroud
jstroud at ucla.edu
Wed Apr 12 22:26:22 EDT 2006
John Machin wrote:
> On 13/04/2006 11:23 AM, James Stroud wrote:
>> opt_map = {'m': 'Queue Manager', 's': 'Server', 'p': 'Port',
>> 'o': 'Object', 'k': 'Key', 't': 'To',
>> 'c': 'Check', 'd': 'Report', 'q': 'Display}
>>
>
> 'Queue Manager' is not suitable for later use as an attribute name.
Who said anything about attribute names? I did it this way to show the
OP that not every value has to be "select variables which would
eventually be included in a class object". Using a dict would be far
more attractive than a bunch of "setattr" & "getattr"s later.
>> afile = open("filename")
>>
>> settings = {}
>> for aline in afile:
>> splitline = aline.split()
>> flags, options = splitline[::2], splitline[1::2]
>> flags = [f[1] for f in flags] # get rid of pesky "-"s
>
>
> Actually that's getting rid of the first character irrespective of
> whether it's "-" or not -- except when there's only one character in
> which case it will die in a hole.
Who said the "-" was optional?
>> for flag, option in zip(flags, options):
>> settings[opt_map(flag)] = option
>> print "%s = %s" % (opt_map(flag), option)
>
>
> opt_map is a dict; should be opt_map[flag] in above two lines
Typos.
>> afile.close()
>>
>
> Like Peter said, use optparse -- it handles the no-argument flags, has
> error detection, defaults, can be told the type of the flag, already
> returns the goodies as attributes of an object, ...
Peter's post was up when I responded, but it does not give the OP any
ideas about how to write better python code. Note the 4 page if...elif
construct. optparse might be logical for vet pythonistas, but if someone
is writing code like to OP, it might be better to give him some coding
hints at the expense of sophistication.
James
--
James Stroud
UCLA-DOE Institute for Genomics and Proteomics
Box 951570
Los Angeles, CA 90095
http://www.jamesstroud.com/
More information about the Python-list
mailing list