format関数による文字列フォーマット(新しい形式) » Python Snippets

Python2.6から使用可能なstr.format関数。旧来の%形式の文字列フォーマットよりも好ましい書き方。

波括弧で囲まれたフィールドにパラメータを埋め込んで文字列を指定する。波括弧自体を扱う場合は二重に記述してエスケープする。{{, }}
詳細について 7.1.3. 書式指定文字列の文法

埋め込み

>>> "My Name is {0}.".format("John")   #インデックスを指定して埋め込み
'My Name is John.'
>>> "My Name is {0}. Hello {1}".format("John", "Taro")
'My Name is John. Hello Taro'

# キーワード引数で指定
>>> "My Name is {person1}. Hello {person2}".format(person1="John", person2="Taro")
'My Name is John. Hello Taro'

# ディクショナリで指定する場合はアンパックすればよい
>>> d = {"name": "John", "age": 20}
>>> "My name is {name}. I'm {age} years old.".format(**d) #アンパックしてキーワード引数に
"My name is John. I'm 20 years old."

# 属性の取得
>>> class Person:
...   def __init__(self, name, age):
...     self.name = name
...     self.age = age
... 
>>> p = Person('John', 25)
>>> p.name
'John'
>>> "My name is {0.name}. I'm {0.age} years old.".format(p)  #p.name, p.ageを埋め込み
"My name is John. I'm 25 years old."

書式指定

書式指定の詳細は、こちらを参照。
7.1.3.1. 書式指定ミニ言語仕様

# 幅指定
>>> "{0:<10}".format("Hello") #10文字幅。左寄せ
'Hello     '
>>> "{0:^10}".format("Hello") #10文字幅。センタリング
'  Hello   '
>>> "{0:>10}".format("Hello") #10文字幅。右寄せ
'     Hello'
>>> "{0:_>10}".format("Hello") # 詰め文字に_を指定。10文字幅。右寄せ
'_____Hello'
>>> "{0:0>6}".format(123) #前ゼロ埋め
'000123'


# 数値(10進, 16進, 8進, 2進)
>>> "int: {0:d};  hex: {0:X};  oct: {0:o};  bin: {0:b}".format(42)
'int: 42;  hex: 2A;  oct: 52;  bin: 101010'
# 数値 3桁カンマ区切り (Python2.7以降)
>>> "{0:,d}".format(1234567)
'1,234,567'
# 固定小数点3桁
>>> "{0:.3f}".format(12.34)
'12.340'

# 日付フォーマット
>>> import datetime
>>> d = datetime.datetime.now()
>>> "{0:%Y-%m-%d %H:%M:%S}".format(d)
'2012-10-07 08:15:03'
関連記事: