Iterating command switches from a data file - have a working solution but it seems inefficient

John Machin sjmachin at lexicon.net
Wed Apr 12 23:56:24 EDT 2006


On 13/04/2006 12:26 PM, James Stroud wrote:
> 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".

Sorry, I don't understand that sentence.

> Using a dict would be far 
> more attractive than a bunch of "setattr" & "getattr"s later.

Who said anything about a bunch of *attrs later?

Instead of
	settings[opt_map[flag]] = option
you'd have
	setattr(anobj, opt_map[flag], option)
with the __init__ for the class setting up the default values.
And no getattrs, you'd use the names like qmgr and port as per the OP: 
anobj.qmgr, anobj.port, etc ...

> 
>>> 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?

Nobody. Who said the user data was going to be syntactically correct?

> 
>>>   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. 

Yes it does. It gives the OP the idea that if there's a Python standard 
module that does the job, the best Python code that the OP could write 
would be calls to that module.

> Note the 4 page if...elif 
> construct.

I did. I read *all* of it.

>  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.

The "sophistication" of optparse appears to match what the OP appears to 
want to do; IMO preferable to the sophistry of something like

flags, options = splitline[::2], splitline[1::2]

which is sure to cause the OP some headscratching and needs to be thrown 
away immediately he starts to consider (a) variable number of parameters 
(b) error detection.





More information about the Python-list mailing list