【python】pprintを使い、整型する【JSON】

スポンサーリンク
Python

出力結果を整型して見やすくしたい!
そんな時は、pprintです。
そのpprintの使い方を説明します。

まずは、fromとimportでパッケージをインポートしましょう。

from pprint import pprint

pprintとprintの違い

サンプルとして、このリスト”a”を使用します。

a = [{'one': 1, 'two': 2, 'three': 3},
     {'four': 4, 'five': 5, 'six': 6},
     {'sevennine': [7, 8, 9]}]

このリスト”a”を「print」と「pprint」で出力します。

print(a)
>[{'one': 1, 'two': 2, 'three': 3}, {'four': 4, 'five': 5, 'six': 6}, {'sevennine': [7, 8, 9]}]

pprint(a)
>[{'one': 1, 'three': 3, 'two': 2},
 {'five': 5, 'four': 4, 'six': 6},
 {'sevennine': [7, 8, 9]}]

「print」では、改行なしの一列で出力されます。
「pprint」では、見やすいように整形されて出力されます。

pprintのパラメータ

width (default = 80)

pprintのパラメータの一つ、”width”は1行に書く文字数。

pprint(a, width=80)
>[{'one': 1, 'three': 3, 'two': 2},
  {'five': 5, 'four': 4, 'six': 6},
  {'sevennine': [7, 8, 9]}]

pprint(a, width=10)
>[{'one': 1,
   'three': 3,
   'two': 2},
  {'five': 5,
   'four': 4,
   'six': 6},
  {'sevennine': [7,
                 8,
                 9]}]

indent (default = 1)

インデント幅を指定できます。

pprint(a, indent = 1)
>[{'one': 1, 'three': 3, 'two': 2},
  {'five': 5, 'four': 4, 'six': 6},
  {'sevennine': [7, 8, 9]}]

pprint(a, indent = 3)
>[  {'one': 1, 'three': 3, 'two': 2},
    {'five': 5, 'four': 4, 'six': 6},
    {'sevennine': [7, 8, 9]}]

depth (default = None)

depthは要素の深さを指定できます。
指定された深さよりも奥になる要素は[…]や{…}として省略されます。
デフォルトではNoneですべてを出力します。

pprint(a ,depth=None)
>[{'one': 1, 'three': 3, 'two': 2},
  {'five': 5, 'four': 4, 'six': 6},
  {'sevennine': [7, 8, 9]}]

pprint(a ,depth=2)
>[{'one': 1, 'three': 3, 'two': 2},
  {'five': 5, 'four': 4, 'six': 6},
  {'sevennine': [...]}]

stream (default = None)

streamは整型データの出力先ファイルを設定します。
デフォルトではNoneで設定されていません。

with open('./pprint.txt','w') as f:
    pprint(a ,stream=f)
[{'one': 1, 'three': 3, 'two': 2},
 {'five': 5, 'four': 4, 'six': 6},
 {'sevennine': [7, 8, 9]}]

compact (default = False)

もし、表示したい要素の文字数がwidthの指定文字数に収まらない場合
compactがFalseだと
要素を一つずつ改行して表示します。

compactがTrueだと
widthの指定文字数に収まらなかった部分のみを改行します。

b = [[1, 2, 3, 4, 5],[100, 200, 300, 400,500]]

pprint(b ,width=20, compact=False)
>[[1, 2, 3, 4, 5],
  [100,
   200,
   300,
   400,
   500]]

pprint(b ,width=20, compact=True)
>[[1, 2, 3, 4, 5],
  [100, 200, 300,
   400, 500]]

sort_dicts (default = True)

PythonのVer3.8以降に追加されました。

sort_dictsがTrueの場合、出力するデータが辞書型だと
キーの順序をソートします。
Falseの場合は、入力された順序で出力します。

c = {1: 10, 9: 90, 2: 20, 8: 80, 3: 30}

pprint.pprint(c, sort_dicts=True)
>{1: 10, 2: 20, 3: 30, 8: 80, 9: 90}

pprint.pprint(c, sort_dicts=False)
>{1: 10, 9: 90, 2: 20, 8: 80, 3: 30}

pprintの使い所

JSONの出力

pprintの使い所といえば、まずJSON形式データの出力でしょうか。

JSONはAPIなどの通信によく使われる形式です。
通信できたデータを確認するためには
‘print’ と ‘pprint’ では見やすさが変わり
処理の考え方がすっきりとします。

d=[{"person1":{"id":"1", "name":"taro"}},{"person2":{"id":"2","name":"jiro"}}] #JSON

print(d)
>[{'person1': {'id': '1', 'name': 'taro'}}, {'person2': {'id': '2', 'name': 'jiro'}}]

pprint(d)
>[{'person1': {'id': '1', 'name': 'taro'}},
  {'person2': {'id': '2', 'name': 'jiro'}}]

最後に

以上でpprintの使い方を終了します。

JSON形式のデータの処理が知りたい!という方には
こちらの「pythonでのJSONの処理と特定の値の取り方」の記事を見てみてください。

【python】JSONの処理と特定の値の取り方
この記事ではpythonでのJSONデータの読込処理と読み込んだJSONから特定の値を取り出す方法についての紹介です。JSONの処理って、そんなに頻度多くなく ついつい忘れます。そのときに、すぐわかるようにするため、この記事を書きます。ついでに自分への備忘録でもあります。

よりpythonの知識を深めたい方には
こちらの書籍をお勧めします。私も参考にしています。

O’REILLY 入門 Python3

タイトルとURLをコピーしました