カテゴリー
アーカイブ

05.22
2022

[Python] pprint()

  • LINE

今回はPythonの標準ライブラリであるpprint(Pretty Print)モジュール、についてご紹介します!(Pretty Printでpprint、可愛い...)

pprintとは

list型やdict型のオブジェクトを見やすく綺麗に整形して出力(pretty-print)することがでる、Pythonの標準ライブラリです。

公式ドキュメント:https://docs.python.org/ja/3/library/pprint.html

 

print() と、pprint()の比較

まずは、pprintのimportとデータを用意します。

>>> from pprint import pprint
>>> lis = ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December']
>>> dic = {'A': {'height': 170, 'weight': 60}, 'B': {'height': 171, 'weight': 61}, 'C': {'height': 172, 'weight': 62}, 'C': {'height': 173, 'weight': 63}, 'D': {'height': 174, 'weight': 64}}

print()

>>> print(lis)
['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December']
>>> print(dic)
{'A': {'height': 170, 'weight': 60}, 'B': {'height': 171, 'weight': 61}, 'C': {'height': 173, 'weight': 63}, 'D': {'height': 174, 'weight': 64}}
>>>

print()では、listとdictの要素が1行で出力されて少し見づらいですね。

pprint()

>>> pprint(lis)
['January',
'February',
'March',
'April',
'May',
'June',
'July',
'August',
'September',
'October',
'November',
'December']
>>>
>>> pprint(dic)
{'A': {'height': 170, 'weight': 60},
'B': {'height': 171, 'weight': 61},
'C': {'height': 173, 'weight': 63},
'D': {'height': 174, 'weight': 64}}
>>>

pprint()を使用すると、listとdictの要素が改行されて出力されてとても見やすくなります!

pprintを使う時(私が)

私がpprint() 使用するタイミングは、Djangoのmodelオブジェクトのquerysetのデータ内容を見たい時に使用します。

例えば...

from django.db import models
from datetime import datetime


class Staff(models.Model):
""" スタッフマスタ """
code = models.CharField(verbose_name="スタッフコード", max_length=8)
name = models.CharField(verbose_name="スタッフ名", max_length=255)
password = models.CharField(verbose_name="パスワード", max_length=255)
created_at = models.DateTimeField(verbose_name="登録日時", default=datetime.now())
updated_at = models.DateTimeField(verbose_name="更新日時", auto_now=True)
is_deleted = models.BooleanField(verbose_name="削除フラグ", default=False) # False:有効 / True:論理削除

class Meta:
db_table = "m_staff"
verbose_name = "スタッフマスタ"
verbose_name_plural = "スタッフマスタ"

def __str__(self):
""" Django 管理画面の表示用文字列

:return: "(ID:pk) Staff.name"
"""
return "(ID:{}) {}".format(self.pk, self.name)

のようなStaffというmodelがあって、

>>> staff_qs = Staff.objects.all().values()

djangoのQuerySetのvalues()メソッドを使って辞書型のQuerySetを取得したとします。

取得したQuerySetをpprint()で出力すると、

>>> pprint(list(staffs_qs)) # QuerySet型のままだと改行してくれないので list型に変換
[{'code': '0001',
'created_at': datetime.datetime(2021, 5, 25, 12, 40, 35, tzinfo=<UTC>),
'id': 1,
'is_deleted': False,
'name': 'スタッフ1',
'password': 'password',
'updated_at': datetime.datetime(2022, 5, 10, 6, 31, 28, 23291, tzinfo=<UTC>)},
{'code': '0002',
'created_at': datetime.datetime(2021, 5, 25, 12, 40, 35, tzinfo=<UTC>),
'id': 2,
'is_deleted': False,
'name': 'スタッフ2',
'password': 'password,
'updated_at': datetime.datetime(2022, 5, 10, 6, 31, 32, 988976, tzinfo=<UTC>)},
{'code': '0003',
'created_at': datetime.datetime(2021, 5, 25, 13, 16, 5, tzinfo=<UTC>),
'id': 3,
'is_deleted': True,
'name': 'スタッフ3',
'password': 'password',
'updated_at': datetime.datetime(2022, 5, 10, 6, 31, 42, 133140, tzinfo=<UTC>)},
{'code': '0004',
'created_at': datetime.datetime(2021, 5, 28, 6, 26, 59, tzinfo=<UTC>),
'id': 4,
'is_deleted': True,
'name': 'スタッフ4',
'password': 'password',
'updated_at': datetime.datetime(2022, 5, 10, 6, 31, 48, 300562, tzinfo=<UTC>)},
{'code': '0005',
'created_at': datetime.datetime(2021, 6, 12, 3, 27, 27, tzinfo=<UTC>),
'id': 5,
'is_deleted': False,
'name': 'スタッフ5',
'password': 'password,
'updated_at': datetime.datetime(2022, 5, 10, 6, 32, 0, 873238, tzinfo=<UTC>)}]
>>>

あら素敵。見やすい。

 

デバッグでデータの内容を確認する際にとても便利なpprintでした!