順番に読み進めながら学べます

pprint — 入れ子の dict と list を読みやすく表示する

printが1行に詰め込む入れ子のdict/listを、pprint.ppで改行・字下げして表示し、pformatで整形済み文字列をlogに渡す方法を、注文データと設定データで実行します。

デバッグでprintを使うと、入れ子の辞書やリストが 1 行に詰め込まれて改行されず読みにくくなることがよくあります。pprint(pretty-print)モジュールは、ネスト構造を字下げして改行付きで表示してくれる標準ライブラリで、デバッグや log 出力で重宝します。

pp と pformat — 表示する関数と文字列を返す関数

pprint には 2 つの主役があります。pprint.pp(値)整形して標準出力に直接表示する関数で、戻り値はNoneです。一方のpprint.pformat(値)整形後の文字列を返す関数で、画面には何も出ません。

pp と pformat の違い
入れ子の値dict / listpprint.pp(値)標準出力に表示戻り値は None入れ子の値dict / listpprint.pformat(値)整形済み文字列を返す
pp整形して直接 printする(戻り値は None)。pformat整形済み文字列を返すだけで画面には出ない。文字列を加工してから print したり、log や error メッセージに埋めたいときが pformat の出番。
関数用途戻り値
pprint.pp(値)整形して標準出力に表示None(直接 print)
pprint.pformat(値)整形後の文字列を返す整形済み文字列
indent=N字下げの幅を指定(既定 1)
width=N1 行の最大幅を指定(既定 80)
sort_dicts=False辞書のキー順を保ったまま表示(Python 3.8+)

pprint.pp で構造を保って表示する

pprint.pp(値)print(値)は、シンプルな値ならどちらも同じように見えますが、入れ子の dict や listになると出力が異なります — printは 1 行に詰め込んでしまうのに対し、pp構造の深さに応じて改行と字下げを入れて表示します。

入れ子の注文データorderが用意されています。これをprintpprint.ppの両方で出力して、見え方の違いを目で確認します。

① 最初に--- print ---を表示してから、print(order)で出力してください

② 続いて--- pprint.pp ---を表示してから、pprint.pp(order)で出力してください

(正しく実行できれば解説が表示されます)

Python エディタ

コードを実行してください

pprint.pformat で整形済みの文字列を取り出す

pprint.pformat(値)整形後の文字列を返すだけで、画面には何も出力しません。出力先を変えたい場面(log にまとめて渡す / 文字列の前後に他の情報をくっつけて print したい / エラーメッセージに埋めたい)でpformatを選びます。width=Nindent=Nのオプションはppと同じように使えます。

設定データconfigが用意されています。これをpformatで整形し、ログ風のラベルを付けて出力します。整形そのものは pprint に任せ、文字列としての扱いやすさを試します。

pprint.pformatwidth=40を指定してconfigを整形した文字列を変数formattedに入れてください

[CONFIG] 起動時の設定を出力しますという見出し行をprintで出してから、formattedprintで出力してください

Python エディタ

コードを実行してください
QUIZ

理解度チェック

まずは1問ずつ答えてみましょう。

Q1入れ子の辞書を構造を保ったまま改行・字下げして表示したいときに使うのはどれですか?

Q2pprint で文字列を取得して log 出力に渡したいときに使うのはどれですか?

Q3pprint.ppの表示幅を 40 文字に変えるにはどう書きますか?