paseline(my favorite simple script): does something similar exist?
RickMuller
rpmuller at gmail.com
Thu Oct 12 16:19:23 EDT 2006
Wow! 6 responses in just a few minutes. Thanks for all of the great
feedback!
skip at pobox.com wrote:
> Rick> def parseline(line,format):
> Rick> xlat = {'x':None,'s':str,'f':float,'d':int,'i':int}
> Rick> result = []
> Rick> words = line.split()
> Rick> for i in range(len(format)):
> Rick> f = format[i]
> Rick> trans = xlat.get(f,'None')
> Rick> if trans: result.append(trans(words[i]))
> Rick> if len(result) == 0: return None
> Rick> if len(result) == 1: return result[0]
> Rick> return result
>
> Note that your setting and testing of the trans variable is problematic. If
> you're going to use xlat.get(), either spell None correctly or take the
> default:
>
> trans = xlat.get(f)
> if trans:
> result.append(trans(words[i]))
>
> As Paul indicated though, it would also be better to not to silently let
> unrecognized format characters pass. I probably wouldn't let KeyError float
> up to the caller though:
>
> trans = xlat.get(f)
> if trans:
> result.append(trans(words[i]))
> else:
> raise ValueError, "unrecognized format character %s" % f
>
> Finally, you might consider doing the splitting outside of this function and
> pass in a list. That way you could (for example) easily pass in a row of
> values read by the csv module's reader class (untested):
>
> def format(words, fmt):
> xlat = {'x':None,'s':str,'f':float,'d':int,'i':int}
> result = []
> for i in range(len(fmt)):
> f = fmt[i]
> trans = xlat.get(f)
> if trans:
> result.append(trans(words[i]))
> else:
> raise ValueError, "unrecognized format character %s" % f
> return result
>
> Rick> I'm posting this here because (1) I'm feeling smug at what a
> Rick> bright little coder I am, and (2) (in a more realistic and humble
> Rick> frame of mind) I realize that many many people have probably found
> Rick> solutions to similar needs, and I'd imaging that many are better
> Rick> than the above. I would love to hear how other people do similar
> Rick> things.
>
> It seems quite clever to me.
>
> Skip
More information about the Python-list
mailing list