9.5 データを読みやすい形式で出力する — pprint
Web APIから取得したJSONデータや、複雑にネストされた(階層が深い)辞書・リストの構造を確認したいとき、通常の print() 関数を使うと、すべてのデータが1行に押し込まれて出力されてしまい、非常に読みづらくなります。
そんな時に活躍するのが、Pythonの標準ライブラリである 「pprint」(pretty-print:綺麗に印刷する)モジュールです。
本記事では、「9.5 データを読みやすい形式で出力する」として、pprint を使ったデータの見やすい表示方法と、便利なカスタマイズ引数について解説します。
1. print と pprint の違いを体感する
Section titled “1. print と pprint の違いを体感する”百聞は一見に如かずです。同じ複雑なデータを、通常の print() と pprint() の両方で出力して比較してみましょう。
from pprint import pprint
# 複雑にネストされたデータ(辞書の中にリストや辞書が入っている)user_data = { "id": 101, "name": "Alice", "roles": ["admin", "editor"], "settings": { "theme": "dark", "notifications": {"email": True, "sms": False} }}
print("--- 通常の print の場合 ---")print(user_data)
print("\n--- pprint の場合 ---")pprint(user_data)【出力結果】
--- 通常の print の場合 ---{'id': 101, 'name': 'Alice', 'roles': ['admin', 'editor'], 'settings': {'theme': 'dark', 'notifications': {'email': True, 'sms': False}}}
--- pprint の場合 ---{'id': 101, 'name': 'Alice', 'roles': ['admin', 'editor'], 'settings': {'notifications': {'email': True, 'sms': False}, 'theme': 'dark'}}通常の print() では全体が1行にベタ書きされますが、pprint() を使うとデータの階層構造に合わせて自動的に改行とインデント(字下げ)が行われ、人間がひと目で構造を理解できる形になります。また、辞書のキーも自動的にアルファベット順にソートされて表示されます。
2. pprint() の便利なカスタマイズ引数
Section titled “2. pprint() の便利なカスタマイズ引数”pprint() 関数には、出力形式を細かく調整できる便利な引数が用意されています。
2.1 indent(インデントの幅)
Section titled “2.1 indent(インデントの幅)”各階層を下げる際のスペースの数を指定します。デフォルトは 1 です。数値を大きくすると、より深く字下げされます。
# インデントを 4 スペースにするpprint(user_data, indent=4)2.2 width(1行の最大文字数)
Section titled “2.2 width(1行の最大文字数)”出力する1行の最大文字数を指定します。デフォルトは 80 文字です。データがこの文字数に収まる場合は1行で表示され、超える場合は改行して整形されます。この値を小さくすると、短いデータでも強制的に改行させることができます。
# 幅を 20 文字に制限して、細かく改行させるpprint(user_data, width=20)2.3 depth(表示する最大階層)
Section titled “2.3 depth(表示する最大階層)”データが深すぎる(階層が多すぎる)場合に、表示する深さを制限します。指定した階層より深い部分は {...} や [...] のように省略して表示されるため、巨大なデータの全体像をざっくり掴みたい時に便利です。
# 階層の深さを 1 までに制限するpprint(user_data, depth=1)# 出力例: {'id': 101, 'name': 'Alice', 'roles': [...], 'settings': {...}}3. 出力せずに文字列として取得する:pformat()
Section titled “3. 出力せずに文字列として取得する:pformat()”pprint() は標準出力(コンソール)に直接データを出力しますが、時には「整形された文字列をファイルに保存したい」あるいは「ログ(logging)に記録したい」という場面があります。
そのような場合は、pprint.pformat() 関数を使用します。使い方は pprint() と全く同じですが、出力する代わりに整形済みの文字列を返してくれます。
from pprint import pformatimport logging
# 文字列として取得formatted_str = pformat(user_data, indent=2)
# ロガーに書き込むなどの処理に利用可能logging.info("ユーザーデータ:\n" + formatted_str)デバッグやログ解析の効率を上げるために、複雑なデータを扱う際は print() の代わりに pprint() を使う癖をつけておくと非常に役立ちます。