文字列の大文字・小文字の色々な変換

呼称: 文字列の大文字・小文字の色々な変換
目的: 目的に応じて文字列を大文字、又は小文字へ変換する
特徴: ジェネレータを用いる事で柔軟な変換ができる
用例: 文字列の比較演算の前処理や出力のフォーマット整形等
備考: ライブラリも色々、やり方も色々

先日の C 言語での文字列の大文字・小文字の変換に触発されて、python でも同様のことをやってみました。python だと、title(), capitalize(), lower()/upper() が標準ライブラリとして提供されています。それだけだと、ライブラリリファレンス見て下さいねで終わってしまうので、ジェネレータを用いた変換関数を作成してみました(^ ^;;

ジェネレータ(yield) は python 2.5 で追加された機能になります。私自身、yield の使い方がよく分かっていないのですが、リストの処理を途中でやめるような場合には、汎用的に使えると思います。

#!/usr/bin/env python

def main():
    s1 = 'capitalize string'
    s2 = 'UNCAPITALIZE STRING'
    
    print '### title() method'
    print s1.title()
    print s2.title()

    print '\n### capitalize() method'
    print s1.capitalize()
    print s2.capitalize()

    print '\n### lower()/upper() method'
    print s1.upper()
    print s2.lower()

    print '\n### my_str_lower_upper() method'
    cnt = 5; rs = ''
    r = my_str_lower_upper(s1, lambda x: x.upper())
    for i in xrange(0, cnt):
        rs += rs.join(r.next())
    print rs + s1[cnt:]
    
    cnt = 10; rs = ''
    r = my_str_lower_upper(s2, lambda x: x.lower())
    for i in xrange(0, cnt):
        rs += rs.join(r.next())
    print rs + s2[cnt:]

def my_str_lower_upper(string, func):
    """ convert character by func()"""
    for s in string:
        yield func(s)

if __name__ == '__main__':
    main()

実行結果。

### title() method
Capitalize String
Uncapitalize String

### capitalize() method
Capitalize string
Uncapitalize string

### lower()/upper() method
CAPITALIZE STRING
uncapitalize string

### my_str_lower_upper() method
CAPITalize string
uncapitaliZE STRING

リファレンス:
3.6.1 文字列メソッド
LL Golf Hole 2 - 文字列に含まれる単語の最初の文字を大文字にする
formatメモ