Python2.6から使用可能なstr.format関数。旧来の%形式の文字列フォーマットよりも好ましい書き方。
波括弧で囲まれたフィールドにパラメータを埋め込んで文字列を指定する。波括弧自体を扱う場合は二重に記述してエスケープする。{{, }}
詳細について 6.1.3. 書式指定文字列の文法
またPython3.6からフォーマット関数と同等の機能をもつ フォーマット済み文字列リテラル(f-string) が導入されました。※後述
埋め込み
>>> "A={0}.".format("John")
#インデックスを指定して埋め込み
'A=John.'
>>> "A={0}. B={1}".format("John", "Taro")
'A=John. B=Taro'
# キーワード引数で指定
>>> "A={ab}. B={cd}".format(ab="John", cd="Taro")
'A=John. B=Taro'
# ディクショナリで指定する場合はアンパックすればよい
>>> d = {"a": "John", "b": 20}
>>> "A={a}. B={b}.".format(**d)
#アンパックしてキーワード引数に
"A=John. B=20."
# 属性の取得
>>> class Person:
... def __init__(self, name, age):
... self.name = name
... self.age = age
...
>>> p = Person('John', 25)
>>> p.name
'John'
>>> "A={0.name}. B={0.age}.".format(p)
#p.name, p.ageを埋め込み
"A=John. B=25."
書式指定
書式指定の詳細は、こちらを参照。
6.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};".format(42)
'int: 42; hex: 2A;'
>>> "oct: {0:o}; bin: {0:b}".format(42)
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'
日付フォーマット文字列はここを参照。
https://docs.python.org/ja/3/library/time.html#time.strftime
Directive | Meaning | Notes |
---|---|---|
%a |
ロケールにおける省略形の曜日名。 | |
%A |
ロケールにおける省略なしの曜日名。 | |
%b |
ロケールにおける省略形の月名。 | |
%B |
ロケールにおける省略なしの月名。 | |
%c |
ロケールにおける適切な日付および時刻表現。 | |
%d |
月の始めから何日目かを表す 10 進数 [01,31]。 | |
%H |
(24 時間計での) 時を表す 10 進数 [00,23]。 | |
%I |
(12 時間計での) 時を表す 10 進数 [01,12]。 | |
%j |
年の初めから何日目かを表す 10 進数 [001,366]。 | |
%m |
月を表す 10 進数 [01,12]。 | |
%M |
分を表す 10 進数 [00,59]。 | |
%p |
ロケールにおける AM または PM に対応する文字列。 | (1) |
%S |
秒を表す 10 進数 [00,61]。 | (2) |
%U |
年の初めから何週目か (日曜を週の始まりとします)を表す 10 進数 [00,53]。年が明けてから最初の日曜日までの全ての 曜日は 0 週目に属すると見なされます。 |
(3) |
%w |
曜日を表す 10 進数 [0(日曜日),6]。 | |
%W |
年の初めから何週目か (日曜を週の始まりとします)を表す 10 進数 [00,53]。年が明けてから最初の月曜日までの全ての 曜日は 0 週目に属すると見なされます。 |
(3) |
%x |
ロケールにおける適切な日付の表現。 | |
%X |
ロケールにおける適切な時刻の表現。 | |
%y |
上 2 桁なしの西暦年を表す 10 進数 [00,99]。 | |
%Y |
上 2 桁付きの西暦年を表す 10 進数。 | |
%Z |
タイムゾーンの名前 (タイムゾーンがない場合には空文字列)。 | |
%% |
文字 “%” 自体の表現。 |
Python3.6以降のフォーマット済み文字列リテラル(f-string)
Python3.6からformat関数を使わなくても、fで始まる文字列リテラルf""
で簡単に文字列埋め込みができるようになりました。
>>> foo=123
>>> bar="Hello"
>>> f"{foo:0>4}: {bar}"
'0123: Hello'
fで始まる文字列リテラルを使うだけで書式指定などはformat関数と同様です。参照可能な変数名を埋め込むことができます。
ピンバック: [maya] python:文字列フォーマット操作、%演算子 | CG Anatomy
ピンバック: Raspberry PiでSQLiteとGoogle Chart – Atelier d' OFCOURSE
助かりました。
ありがとうございます。
分かり易い説明を有難うございました。