Pythonでリストや辞書、特にネストされた(入れ子構造の)複雑なデータ構造を扱う際、print()
関数でその内容を確認しようとすると、すべてのデータが一行で表示されてしまい、非常に読みにくいことがあります。
このようなデータを、人間が読みやすいように整形して表示してくれるのが、Pythonの標準ライブラリである**pprint
**(pretty-print)モジュールです。
通常のprint
関数の限界
まずは、複雑なデータ構造を通常のprint()
関数で表示した場合の問題点を見てみましょう。ここでは、ユーザー情報のリスト(リストの中に辞書が含まれる形)を例にします。
# ユーザーデータのリスト
user_data = [
{'id': 101, 'name': 'Alice', 'roles': ['admin', 'editor']},
{'id': 102, 'name': 'Bob', 'roles': ['viewer']},
{'id': 103, 'name': 'Charlie', 'roles': ['editor', 'contributor']}
]
# print()関数で表示する
print(user_data)
これを実行すると、ターミナルには以下のように表示されます。
[{'id': 101, 'name': 'Alice', 'roles': ['admin', 'editor']}, {'id': 102, 'name': 'Bob', 'roles': ['viewer']}, {'id': 103, 'name': 'Charlie', 'roles': ['editor', 'contributor']}]
データが一行に圧縮されてしまい、構造を把握するのが困難です。
pprint
モジュールで見やすく表示する
pprint
モジュールを使うと、この問題が解決します。pprint
モジュールをインポートし、pprint.pprint()
関数を使って同じデータを表示してみましょう。
import pprint
user_data = [
{'id': 101, 'name': 'Alice', 'roles': ['admin', 'editor']},
{'id': 102, 'name': 'Bob', 'roles': ['viewer']},
{'id': 103, 'name': 'Charlie', 'roles': ['editor', 'contributor']}
]
# pprint.pprint()関数で表示する
pprint.pprint(user_data)
実行結果は以下のようになります。
[{'id': 101, 'name': 'Alice', 'roles': ['admin', 'editor']},
{'id': 102, 'name': 'Bob', 'roles': ['viewer']},
{'id': 103, 'name': 'Charlie', 'roles': ['editor', 'contributor']}]
pprint.pprint()
は、データ構造に応じて自動的に改行とインデントを加え、辞書のキーをアルファベット順にソートしてくれるため、出力が劇的に読みやすくなります。これにより、デバッグ作業やデータの内容確認が非常に効率的になります。
pprint.pformat()
:整形後の文字列を取得する
pprint.pprint()
が結果を直接コンソールに出力するのに対し、pprint.pformat()
関数は、整形された文字列を戻り値として返します。
これにより、整形されたデータをログファイルに書き出したり、変数に保存して後から利用したりすることができます。
import pprint
user_data = [
{'id': 101, 'name': 'Alice', 'roles': ['admin', 'editor']},
{'id': 102, 'name': 'Bob', 'roles': ['viewer']}
]
# 整形された文字列を変数に保存
formatted_string = pprint.pformat(user_data)
# 変数に保存した文字列を表示
print(formatted_string)
まとめ
print()
関数は、複雑なデータ構造を一行で表示するため読みにくいことがあります。pprint.pprint()
は、辞書やリストを人間が読みやすいように整形して出力します。pprint.pformat()
は、整形された結果を文字列として返します。
pprint
は、特にAPIから受け取ったJSONデータや、複雑な設定ファイルの内容を確認する際など、開発の様々な場面で役立つ強力なツールです。デバッグの際にはぜひ活用してください。