localeモジュールのlocale.format()が気持ち悪い件
bonlifeです。数値をカンマ区切りで表示したい!ということで、ググって見つかった id:gunyara-python:20070506:1178432131 のコメント欄、 id:ymorimoto:20070831:p1 を参考にしてlocaleモジュールを試してみました。locale.format()がイメージと違う動きでショック…。
In [1]: import locale In [2]: locale.setlocale(locale.LC_NUMERIC,'ja') Out[2]: 'Japanese_Japan.932' In [3]: locale.format('%d',1000) Out[3]: '1000' In [4]: locale.format('%d',1000,True) Out[4]: '1,000'
ここまではOK。
In [5]: locale.format('%10d',1000) Out[5]: ' 1000' In [6]: locale.format('%10d',1000,True) Out[6]: ' 1,000' In [7]: len(locale.format('%10d',1000)) Out[7]: 10 In [8]: len(locale.format('%10d',1000,True)) Out[8]: 11
3つ目の引数をTrueにして「ユー、localeを意識してカンマ付けちゃいなよ!」って指示しながら、さらに表示する長さを10に指定すると、11文字になるです!ガーン…。
回避策はこんな感じですかね。ダサいけど。
In [9]: '%10s' % locale.format('%d',1000,True) Out[9]: ' 1,000'