Pythonのformat
を使った新しい文字列の書式操作注は、{}
を使って次のようにして使います。
>>> '{0} + {1} = {2}'.format(1, 2, 1+2)
'1 + 2 = 3'
{0} {1} {2}
が順になっている場合はポジション引数は省略可能です。
>>> '{} + {} = {}'.format(1, 2, 1+2)
'1 + 2 = 3'
キーワード引数は次のように使います。
>>> 'Hello {name}!'.format(name='John')
'Hello John!'
dxob
を使って、10進表記、16進表記などでも表示できます。
>>> '{0:d} {0:x} {0:o} {0:b}`.format(15)
15 f 17 1111
#
オプションで0x
などのプリフィックスが追加されます。
>>> '{0:#d} {0:#x} {0:#o} {0:#b}`.format(15)
15 0xf 0o17 0b1111
少し便利な機能として、1000
ごとに,
を追加することもできます。
>>> '{:,}`.format(1234567890)
1,234,567,890
%03.2f
は{:03.2f}
と書き換えます。
>>> '{:05.2f}'.format(3.141592)
03.14
その他、詳細はリンク先を参照してください。
7.1. string — 一般的な文字列操作 — Python 2.7ja1 documentation
http://docs.python.jp/2/library/string.html
注 Python 3.0では%
を使った書式指定より好ましい書き方とされています。
関連記事
Pythonでnkf
Pythonで文字コードが不明な文字列(例えばインターネット上のHTMLは文字コードが間違っている場合があります)はnkfを使うと簡単に取り扱うことができるみたいです。
# emerge -pv app-i18n/nkf
These are the packages that would be merged, in order:
Calculating dependencies... ...
python-chardet
python-chardetを使った文字コード推定
使い方
>>> import chardet
>>> s = 'こんにちは'
>>> chardet.detect(s)
{'confidence': 0.9690625, 'encoding': 'utf-8'}
>>> s.decode(chardet.detect(s)['encoding'])
u'\u3053\u3...
PythonでUnicodeEncodeErrorとなる場合に
Pythonで端末のエンコーディング取得はgetpreferredencodingでできます。
>>> import sys
>>> locale.getpreferredencoding()
'cp932'
「あいうえお」と表示するスクリプト(sample.py)
# -*- coding: UTF-8 -*-
s = u'あいうえお'
print s
コマンドプロンプ...
Pythonで全角を2文字として文字数を数える方法
Pythonの文字列はlen関数で文字数をカウントできますが、全角と半角の区別はしません。
>>> len(u'abcde')
5
>>> len(u'あいうえお')
5
これはこれで便利な実装なのですが、日本語のテキスト処理をしていると、等幅フォントを使ったときに幅をそろえたいなどで、全角を2文字として数えると何文字になるか調べたいことがあります。そういう場合にはunicodeda...
PythonでUnicodeのオブジェクトとコードポイントの変換
UnicodeオブジェクトをUnicodeコードポイントに変換
>>> ord(u'あ')
12354
UnicodeコードポイントをUnicodeオブジェクトに変換
>>> unichr(12354)
u'\u3042'
>>> print unichr(12354)
あ
8ビット文字列にordを使うとASCIIコードを取得することもできます。
>>> ord('...
PythonのString Formattingを拡張
Python 3で追加されたformatを使うと文字列操作が便利になります。
使い方は次のような感じです。(参考:Pythonの新しい文字列書式操作)
>>> '{0} + {1} = {2}'.format(1, 2, 1+2)
'1 + 2 = 3'
string.Formatterを継承すると、この文字列操作を拡張することができるそうです。
拡張の仕方は以下のような...