Python 標準の pprint モジュール を使用すると、任意の Python オブジェクトを見やすく整形して出力することができます(整形結果を文字列として取得することもできます)。
例えば次のようなオブジェクトが定義されているとします。
obj = {
'title': 'How to use pprint in Python',
'date': '2020-01-09',
'tags': ['Python', 'Text processing']
}
これを print(obj)
として出力すると、次のように 1 行でオブジェクトの内容が表示されます。
{'title': 'How to use pprint in Python', 'date': '2020-01-09', 'tags': ['Python', 'Text processing']}
代わりに、pprint
モジュールの pprint()
関数を使って次のように出力すると、
import pprint
pprint.pprint(obj, indent=4)
ディクショナリ要素がキー名でソートされ、長すぎる行が改行されて出力されます。
{ 'date': '2020-01-09',
'tags': ['Python', 'Text processing'],
'title': 'How to use pprint in Python'}
pprint.pprint()
関数を使ってオブジェクトを出力した場合でも、出力する内容が短ければ改行は入りません。
pprint.pprint()
関数の定義は次のようになっており、デフォルトでは、80 文字以内 であれば print
関数と同様に 1 行で出力されるようになっています。
pprint.pprint(object, stream=None, indent=1, width=80, depth=None, *, compact=False, sort_dicts=True)
indent
オプションでは改行時のインデント幅、sort_dicts
オプションではディクショナリをソートして出力するかを制御することができます。
pprint.pprint()
関数は、オブジェクトの内容を整形してストリーム(デフォルトでは sys.stdout
)に出力しますが、代わりに pprint.pformat()
関数を使用すると、整形結果を文字列として取得することができます。
それ以外は、pprint.pprint()
と同等です。
s = pprint.pformat(obj, indent=4)
print(s)
pprint.pprint()
関数や pprint.pformat()
関数の出力オプションでは、インデント幅 (indent
) や折り返し文字数 (width
)、ディクショナリをソートするかどうか (sort_dicts
) といった指定を行うことができます。
これらの関数を何度も呼び出す場合は、毎回同じ出力パラメータを指定するのが煩わしいかもしれません。
そのような場合は、PrettyPrinter
オブジェクトを生成し、その pprint()
メソッドを呼び出すようにすると、同じ出力オプションを使いまわすことができます。
PrettyPrinter
クラスのコンストラクタでは、次のように pprint.pprint()
関数と同様の出力オプションを指定することができます。
PrettyPrinter(indent=1, width=80, depth=None, stream=None, *, compact=False, sort_dicts=True)
次のサンプルコードでは、最初に出力オプションを指定した PrettyPrinter
オブジェクトを生成し、それを使って複数のオブジェクトを整形して出力しています。
import pprint
pp = pprint.PrettyPrinter(indent=4, width=40, sort_dicts=False)
# obj1、obj2、obj3 は別の場所で定義されているとします
pp.pprint(obj1)
pp.pprint(obj2)
pp.pprint(obj3)