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