Bengt Richter wrote: > On Mon, 11 Jul 2005 22:10:33 -0400, "Colin J. Williams" <[EMAIL PROTECTED]> > wrote: > > >>The snippet of code below gives the result which follows >> >>for k in ut.keys(): >> name= k.split('_') >> print '\n1', name >> if len(name) > 1: >> name[0]= name[0] + name[1].capitalize() >> print '2', name >> name[0]= name[0].capitalize() >> print '3', name >> >>1 ['logical', 'or'] >>2 ['logicalOr', 'or'] >>3 ['Logicalor', 'or'] >> >>I was expecting that 3 would read ['LogicalOr', 'or'] >> >>If I replace the above code with: >> >>for k in ut.keys(): >> name= k.split('_') >> print '\n1', name >> if len(name) > 1: >> name[0]= name[0].capitalize() + name[1].capitalize() >> print '2', name >> else: >> name[0]= name[0].capitalize() >> print '3', name >> >>I get the desired result. >> > > If you walk through the results, you can see what happens to name[2] on > output line 2: > > >>> 'logicalOr'.capitalize() > 'Logicalor' > > I.e., > >>> help(str.capitalize) > Help on method_descriptor: > > capitalize(...) > S.capitalize() -> string > > Return a copy of the string S with only its first character > capitalized. ^^^^-- meaning all the rest > lowercased, > which changed your trailing > 'Or' > > So, doing .capitalize on all the pieces from split('_') and then joining them: > > >>> def doit(w): return ''.join([s.capitalize() for s in w.split('_')]) > ... > >>> doit('logical_or') > 'LogicalOr' > >>> doit('logical') > 'Logical' > >>> doit('logical_or_something') > 'LogicalOrSomething' > >>> doit('UP_aNd_down') > 'UpAndDown' > > Regards, > Bengt Richter Many thanks. I missed the implication that any upper case characters after the first are changed to lower case.
Colin W. -- http://mail.python.org/mailman/listinfo/python-list