この記事では、リストや辞書などのデータを見やすく出力するための pprintモジュール の使い方を解説します。
pprint
モジュール の pprint()
関数 を使うことでデータを見やすくフォーマットしながら出力することができます。
それでは、pprint
の使い方を見ていきましょう❗️
pprint関数を使ってみる
pprint
モジュール の pprint()
関数 を使って出力する前に、通常の print()
関数 を使ってどのように出力されるか確認してみましょう!
data = [{'name': '加藤 学', 'age': 42, 'physique': (186.5, 89.2)},
{'name': '佐藤 めぐみ', 'age': 26, 'physique': (154.2, 42.8)},
{'name': '原田 誠', 'age': 18, 'physique': (171.8, 61.4)}]
print(data)
実行結果
[{'name': '加藤 学', 'age': 42, 'physique': (186.5, 89.2)}, {'name': '佐藤 めぐみ', 'age': 26, 'physique': (154.2, 42.8)}, {'name': '原田 誠', 'age': 18, 'physique': (171.8, 61.4)}]
めちゃくちゃ横長に出力されて見辛いですね。
では次に pprint
モジュール の pprint()
関数 を使って出力してみます。
import pprint
data = [{'name': '加藤 学', 'age': 42, 'physique': (186.5, 89.2)},
{'name': '佐藤 めぐみ', 'age': 26, 'physique': (154.2, 42.8)},
{'name': '原田 誠', 'age': 18, 'physique': (171.8, 61.4)}]
pprint.pprint(data)
実行結果
[{'age': 42, 'name': '加藤 学', 'physique': (186.5, 89.2)},
{'age': 26, 'name': '佐藤 めぐみ', 'physique': (154.2, 42.8)},
{'age': 18, 'name': '原田 誠', 'physique': (171.8, 61.4)}]
上記のように改行されて見やすく出力されました。
インデントを指定する
indent
引数 を指定することでインデントを変更することができます。
import pprint
data = [{'name': '加藤 学', 'age': 42, 'physique': (186.5, 89.2)},
{'name': '佐藤 めぐみ', 'age': 26, 'physique': (154.2, 42.8)},
{'name': '原田 誠', 'age': 18, 'physique': (171.8, 61.4)}]
pprint.pprint(data, indent=4)
実行結果
[ {'age': 42, 'name': '加藤 学', 'physique': (186.5, 89.2)},
{'age': 26, 'name': '佐藤 めぐみ', 'physique': (154.2, 42.8)},
{'age': 18, 'name': '原田 誠', 'physique': (171.8, 61.4)}]
改行するまでの文字数を指定する
width
引数 を指定することで改行されるまでの文字数を指定することができる。デフォルト値は 80
です。
import pprint
data = [{'name': '加藤 学', 'age': 42, 'physique': (186.5, 89.2)},
{'name': '佐藤 めぐみ', 'age': 26, 'physique': (154.2, 42.8)},
{'name': '原田 誠', 'age': 18, 'physique': (171.8, 61.4)}]
pprint.pprint(data, width=30)
実行結果
[{'age': 42,
'name': '加藤 学',
'physique': (186.5, 89.2)},
{'age': 26,
'name': '佐藤 めぐみ',
'physique': (154.2, 42.8)},
{'age': 18,
'name': '原田 誠',
'physique': (171.8, 61.4)}]
出力するデータよりも大きな width
を指定すると改行されない。
import pprint
data = [{'name': '加藤 学', 'age': 42, 'physique': (186.5, 89.2)},
{'name': '佐藤 めぐみ', 'age': 26, 'physique': (154.2, 42.8)},
{'name': '原田 誠', 'age': 18, 'physique': (171.8, 61.4)}]
pprint.pprint(data, width=180)
実行結果
[{'age': 42, 'name': '加藤 学', 'physique': (186.5, 89.2)}, {'age': 26, 'name': '佐藤 めぐみ', 'physique': (154.2, 42.8)}, {'age': 18, 'name': '原田 誠', 'physique': (171.8, 61.4)}]
改行は以下のような箇所で行われる。
- リストや辞書の要素ごと
- 文字列の単語ごと
width
引数 で指定した文字数以上になった次の箇所で改行が行われる。
また、リストなどは width
引数 に収まらない場合、全ての要素が改行されて出力されますが、compact
引数 を True
に指定することで幅に収まるだけ要素が詰め込まれて出力されます。
l = list(range(10))
pprint.pprint(l, width=9)
pprint.pprint(l, width=9, compact=True)
実行結果
[0,
1,
2,
3,
4,
5,
6,
7,
8,
9]
[0, 1, 2,
3, 4, 5,
6, 7, 8,
9]
出力する深さを指定する
depth
引数 を指定することでネストされた要素をどこまで表示させるかを指定することができます。省略された部分は ...
で表示されます。
import pprint
data = [{'name': '加藤 学', 'age': 42, 'physique': (186.5, 89.2)},
{'name': '佐藤 めぐみ', 'age': 26, 'physique': (154.2, 42.8)},
{'name': '原田 誠', 'age': 18, 'physique': (171.8, 61.4)}]
pprint.pprint(data, depth=2)
実行結果
[{'age': 42, 'name': '加藤 学', 'physique': (...)},
{'age': 26, 'name': '佐藤 めぐみ', 'physique': (...)},
{'age': 18, 'name': '原田 誠', 'physique': (...)}]
辞書を挿入順で出力する
sort_dicts
引数 を False
に指定することで辞書を挿入順で出力させることができます。デフォルトは True
になっていて key
でソートされた状態で表示されます。
d = {'b': 1, 'a': 2, 'c': 3}
pprint.pprint(d, sort_dicts=False)
pprint.pprint(d)
実行結果
{'b': 1, 'a': 2, 'c': 3}
{'a': 2, 'b': 1, 'c': 3}