auの日記

プログラミング初心者の日記。(auはハンドルネームです)

Pythonのpprintモジュールとは

auです。

Pythonのことを調べていると、「pprint」というモジュールを見かけます。

普通の「print」の違いを知りたくて調べてみました。

pprintモジュールとは

pprintとは、「prentty-print」の略称みたいです。

綺麗に出力するという意味っぽいですね。

その意味の通り、list型やdict型のオブジェクトを綺麗に表示したり、str型に変換する機能があります。

pprintモジュールをimportして使います。

import pprint # importが必要

list_obj = [{"name": "au", "age": 21, "points": [10, 20, 30]}, {"name": "docomo", "age": 40}, {"name": "softbank", "age": 40}]

print(list_obj)
pprint.pprint(list_obj)

# 実行結果
普通のprint:  [{'name': 'au', 'age': 21, 'points': [10, 20, 30]}, {'name': 'docomo', 'age': 40}, {'name': 'softbank', 'age': 40}] 


[{'age': 21, 'name': 'au', 'points': [10, 20, 30]},
 {'age': 40, 'name': 'docomo'},
 {'age': 40, 'name': 'softbank'}]

一列ではなく、整形された状態で出力されています。

widthで1行に表示される分量、depthで深さを知ることができるのですが、使い方は参考を読めば分かりました。
それよりも「どこから改行されるのか、...表示になるのか」を確認してみようと思います。

widthの改行はどこから?

iimport pprint # importが必要

list_obj = {"name": "docomo", "age": 40}
docomo_dict = '{"name": "docomo", "age": 40}'

print("docomoの長さ: ", len(docomo_dict), '\n')
print("width=29")
pprint.pprint(list_obj, width=29)
print("width=28")
pprint.pprint(list_obj, width=28)

# 実行結果
docomoの長さ:  29 

width=29
{'age': 40, 'name': 'docomo'}
width=28
{'age': 40,
 'name': 'docomo'}

dokomoが改行されたのは、"width=28"でした。文字列の長さが29なので、{}や半角スペースなども含めた完全なる1行の長さでした。複数オブジェクトを扱う際に「,」が含まれると思いますが、これも含まれます。
widthは1から数えているみたいですね。

depthの「...」表記はどこから?

import pprint # importが必要

# リストのリストの辞書型という構造
list_obj = [[{"name": "au", "age": 21, "points": [10, 20, 30]}]]

print("depth: ", 2, "\n")
pprint.pprint(list_obj, width=20, depth=2)

print("depth: ", 3)
pprint.pprint(list_obj, width=20, depth=3)

# 実行結果
depth:  2 

[[{...}]]
depth:  3
[[{'age': 21,
   'name': 'au',
   'points': [10,
              20,
              30]}]]

リストの(深さ+1)リストの(深さ+1)辞書(深さ+1)という構造を用意しました。
depth=2で「...」が表示されたので、深さも1から数えているみたいですね。