はじめに
ある変数に想定データが入っているかどうかを確認をする際、私は今までターミナルにprint
で出力していました。
少ないデータを見るときはprint
で十分なのですが、何百件ほどあるデータを見るときは、何も改行・インデントがないため探したいデータを見つけるのに一苦労です。
そこで今回は、ターミナル内のlist型やdict型変数を整形して見やすく改善できるpprint
や更に見やすくできるrich
をご紹介致します。
pprintとは?
pprint
はPython標準ライブラリに含まれているPretty Printモジュールです。通常のprint
関数だと複雑なデータ構造が一行に詰め込まれて読みにくくなりますが、pprint
を使うと見やすい形に整形して表示してくれます。
pprintの使い方
例えば、下記のような複雑な構造をしたdict型の変数data
について考えます。
import pprint
# 複雑なネスト構造を持つ辞書を定義
data = {
"users": [
{"id": 1, "name": "Alice", "roles": ["admin", "editor"]},
{"id": 2, "name": "Bob", "roles": ["viewer"]},
{"id": 3, "name": "Charlie", "roles": ["editor", "viewer"]},
],
"settings": {
"theme": "dark",
"notifications": {"email": True, "sms": False},
"features": ["feature1", "feature2", "feature3"],
},
"logs": [
{"timestamp": "2024-11-27T10:00:00", "action": "login", "user": "Alice"},
{"timestamp": "2024-11-27T10:05:00", "action": "view", "user": "Bob"},
],
}
print('pprintを用いない場合')
print(data)
print('pprintを用いた場合')
pprint.pprint(data)
・出力結果
pprintを用いない場合
{'users': [{'id': 1, 'name': 'Alice', 'roles': ['admin', 'editor']}, {'id': 2, 'name': 'Bob', 'roles': ['viewer']}, {'id': 3, 'name': 'Charlie', 'roles': ['editor', 'viewer']}], 'settings': {'theme': 'dark', 'notifications': {'email': True, 'sms': False}, 'features': ['feature1', 'feature2', 'feature3']}, 'logs': [{'timestamp': '2024-11-27T10:00:00', 'action': 'login', 'user': 'Alice'}, {'timestamp': '2024-11-27T10:05:00', 'action': 'view', 'user': 'Bob'}]}
pprintを用いた場合
{'logs': [{'action': 'login',
'timestamp': '2024-11-27T10:00:00',
'user': 'Alice'},
{'action': 'view',
'timestamp': '2024-11-27T10:05:00',
'user': 'Bob'}],
'settings': {'features': ['feature1', 'feature2', 'feature3'],
'notifications': {'email': True, 'sms': False},
'theme': 'dark'},
'users': [{'id': 1, 'name': 'Alice', 'roles': ['admin', 'editor']},
{'id': 2, 'name': 'Bob', 'roles': ['viewer']},
{'id': 3, 'name': 'Charlie', 'roles': ['editor', 'viewer']}]}
このように、pprint
を用いることで冗長に見えていた出力結果が、listの要素毎・dictの要素毎に表示されるようになり、かなり視覚性が向上します。
また、pprint
はPython標準ライブラリに含まれているためインストールなどは不要で冒頭にimport pprint
と記載するだけで使用することができます。
richとは?
rich
は、Pythonのターミナル出力をより見やすくするためのライブラリです。
データを色付きで表示したり、スタイルを追加したりすることができ、ターミナルでのデバッグ作業をより快適にしてくれます。
richの使い方
まず、rich
を使うためにはライブラリをインストールする必要があります。以下のコマンドでインストールできます。
pip install rich
その後、richライブラリから必要なモジュールをインポートし、使用します。
# 必要なモジュールをインポート
from rich.console import Console
# 複雑な辞書データの準備
data = {
"name": "Alice",
"age": 25,
"skills": ["Python", "Machine Learning", "Data Analysis"],
"experience": {
"company_1": {"name": "sample_company1", "role": "Intern", "years": 1},
"company_2": {"name": "sample_company2", "role": "Engineer", "years": 3},
},
"hobbies": ["Reading", "Cycling", "Gaming"],
}
# 普通の出力(rich を使わない場合)
print("\n=== 普通の出力 ===")
print(data)
# rich を使った出力
console = Console()
console.print("\n[bold yellow]=== Rich を使った出力 ===[/bold yellow]")
console.print(data, highlight=True)
・出力結果
このように、rich
を使わない場合と使った場合では分かりやすさが一目瞭然です。
また、rich
を使うと以下のような機能を活用できます:
- カラー出力:ターミナルに色をつけて、データ構造をより見やすくする
- テキストのスタイル:太字やイタリック、下線などのスタイルを使って強調表示
- テーブル(表):表形式でデータをきれいに整形して表示
- 進捗バー:プログラムの進行状況を視覚的に表示
- マークダウン表示:ターミナル内でマークダウンをレンダリングして表示
pprintとrichの比較と使い分け
比較表
特徴 | pprint | Rich |
---|---|---|
標準ライブラリ | ✔ | ✘(別途インストールが必要) |
色付き表示 | ✘ | ✔ |
カスタマイズ性 | シンプルで必要最低限 | 高い(カラーやスタイルの変更が可能) |
主な用途 | シンプルな整形出力 | 視覚的に綺麗な出力 |
使い分けの基準
-
pprint
- シンプルに整形したい場合に便利
- 標準ライブラリなので追加インストール不要で手軽
- ネストの浅いデータ構造や単純なデバッグ向け
-
Rich
- 色付きやフォーマットの美しさを重視したい場合に最適
- 視覚的な見やすさが必要なデバッグやデータ可視化に活躍
- ターミナル環境に依存するが、より分かりやすい出力が可能
最後に
見やすいターミナルを構築することで作業効率が大幅にUPすると思います。
「他にも、こんな方法があるよ」という意見がある方はぜひ教えて下さい。