Python

Pythonのpprintで出力結果を整形して綺麗に表示する

By 2021年10月24日No Comments

この記事ではPythonの標準ライブラリであるpprintの使い方について解説していきます。

Udemyの動画学習でもPythonを勉強しよう!

「平日の夜の勉強会には時間が間に合わなくて参加できない」「通勤時間のわずかな隙間時間を勉強時間にあてたい」「本ではよく分からないところを動画で理解を深めたい」そんなあなたはUdemyの動画学習がお勧めです!

UdemyのPythonおすすめ33講座レビューリスト

pprintは出力結果を見やすく整形することができます。

print( )関数で画面出力すると配列のオブジェクトが複雑な構造になっていて出力結果を表示する時に見にくい事があります。そのような時にpprintを使うとオブジェクトを綺麗に画面に出力できます。

まずはpprintモジュールをインポートします。

import pprint

まずはprint( )関数とpprint( )関数の出力結果の違いを比較していきます。下記のようなリストの配列にタプルの要素が格納されているオブジェクトのデータを出力します。

print( )関数を使った場合は下記のように出力されます。

a = [
    ('りんご', 100),
    ('いちご', 200),
    ('バナナ', 300),
    ('パイナップル', 400),
    ('みかん', 500),
    ('ぶどう', 600)
]

print(a)

出力結果:

[('りんご', 100), ('いちご', 200), ('バナナ', 300), ('パイナップル', 400), ('みかん', 500), ('ぶどう', 600)]

pprintを使った場合は下記のように出力されます。

import pprint

a = [
    ('りんご', 100),
    ('いちご', 200),
    ('バナナ', 300),
    ('パイナップル', 400),
    ('みかん', 500),
    ('ぶどう', 600)
]

pprint.pprint(a)

出力結果:

[('りんご', 100),
('いちご', 200),
('バナナ', 300),
('パイナップル', 400),
('みかん', 500),
('ぶどう', 600)]

このようリストの中にあるタプルの要素を一行ごとに改行されて綺麗に出力する事ができました。pprint( )関数を使うと出力結果を読みやすく各要素の位置をうまく調整してくれています。

Pythonのpprintで出力結果の表示の設定をする方法

pprint( )関数の引数にindent, width, depth, compactをそれぞれ指定すると、さらに出力結果の表示の設定をして見栄えの調整をする事ができます。

pprint( )関数の第二引数にindentを指定すると出力時のインデント数を設定する事ができます。

a = [
    ('りんご', 100),
    ('いちご', 200),
    ('バナナ', 300),
    ('パイナップル', 400),
    ('みかん', 500),
    ('ぶどう', 600)
]

pprint.pprint(a)
pprint.pprint(a, indent=5)

出力結果:

[('りんご', 100),
('いちご', 200),
('バナナ', 300),
('パイナップル', 400),
('みかん', 500),
('ぶどう', 600)]
[    ('りんご', 100),
    ('いちご', 200),
    ('バナナ', 300),
    ('パイナップル', 400),
    ('みかん', 500),
    ('ぶどう', 600)]

インデント数を調整して出力しました。インデントのデフォルトは1になっています。

pprint( )関数の第二引数にwidthの設定をすると一行につき出力する文字の数を設定する事ができます。デフォルトは80文字です。

リストや辞書データの文字数がwidthの値より小さい場合は要素ごとに改行されます。

b = [1, 2, 3, 4, 5]
pprint.pprint(b)
pprint.pprint(b, width=5)

出力結果:

[1, 2, 3, 4, 5]
[1,
2,
3,
4,
5]

辞書の要素でpprintのwidthの条件を満たしていてバリュー値にスペースがある場合はそこで改行されます。

import pprint

c = {'a': '1 1', 'b': '1 2', 'c': '1 3'}
pprint.pprint(c, width=20)
pprint.pprint(c, width=1)

出力結果:

{'a': '1 1',
'b': '1 2',
'c': '1 3'}
{'a': '1 '
      '1',
'b': '1 '
      '2',
'c': '1 '
      '3'}

pprint( )関数の第二引数にdepthを指定すると出力要素の最大数を決める事ができます。最大数は「深さ」と表現されたりもします。デフォルトの場合に制限はありません。

指定したdepthの数値より大きい場合は子要素が「…」と省略記号で画面に出力されます。今回は下記のような辞書の中にさらに2つの辞書がはいっている入れ子構造の辞書データを使います。

import pprint

c = {1: {1: 'a', 2: {1:'a', 2: 'b'}}, 2: 'a', 3: 'c'}

pprint.pprint(c)

pprint.pprint(c, depth=2)

出力結果:

{1: {1: 'a', 2: {1: 'a', 2: 'b'}}, 2: 'a', 3: 'c'}
{1: {1: 'a', 2: {...}}, 2: 'a', 3: 'c'}

このようにdepthを2で設定したので3つ目の辞書データが省略記号「…」で出力されたのが確認できます。depthを引数に指定すると各要素の出力される子要素の最大数を指定できました。

pprint( )関数の第二引数にcompactを指定すると出力結果の改行数をwidthの設定値の範囲内で最小限に自動的に調整する事ができます。compactはブール値で指定する事ができます。デフォルトはFalseなのでTrueにします。

import pprint

a = [
    ('りんご', 100),
    ('いちご', 200),
    ('バナナ', 300),
    ('パイナップル', 400),
    ('みかん', 500),
    ('ぶどう', 600)
]

pprint.pprint(a, width=50, compact=True)

出力結果:

[('りんご', 100), ('いちご', 200), ('バナナ', 300),
('パイナップル', 400), ('みかん', 500), ('ぶどう', 600)]

このようにcompactは要素が多い配列を出力するときに自動的に行を分割して各要素を出力します。

pprintのpformat( )関数を使うとstr型の文字列として取得する事ができます。pprint( )関数の場合は下記のようにNoneTypeで出力されます。

import pprint

a = [
    ('りんご', 100),
    ('いちご', 200),
    ('バナナ', 300),
    ('パイナップル', 400),
    ('みかん', 500),
    ('ぶどう', 600)
]

aa = pprint.pprint(a)
print(type(aa))

出力結果:

[('りんご', 100),
('いちご', 200),
('バナナ', 300),
('パイナップル', 400),
('みかん', 500),
('ぶどう', 600)]
<class 'NoneType'>

pformat( )関数を使うとstr型で出力されます。

import pprint

a = [
    ('りんご', 100),
    ('いちご', 200),
    ('バナナ', 300),
    ('パイナップル', 400),
    ('みかん', 500),
    ('ぶどう', 600)
]

aa = pprint.pformat(a)
print(type(aa))

出力結果:

<class 'str'>

このようにpformat( )関数を使って文字列型であるstrで出力する事ができました。

pformat( )関数で引数を指定して出力結果を整形する事もできます。引数の指定方法はpprint( )関数と同じです。

import pprint

a = [
    ('りんご', 100),
    ('いちご', 200),
    ('バナナ', 300),
    ('パイナップル', 400),
    ('みかん', 500),
    ('ぶどう', 600)
]

aa = pprint.pformat(a, indent=5, width=50, depth=None, compact=True)
print(aa)

出力結果:

[ ('りんご', 100), ('いちご', 200), ('バナナ', 300),
('パイナップル', 400), ('みかん', 500), ('ぶどう', 600)]

このように文字列として出力したい時にpformat( )関数を使います。

Pythonのpprintを使ってファイル出力をする

pprint( )関数の引数にstreamを指定するとファイルの出力先を設定する事ができます。

import pprint

a = [
    ('りんご', 100),
    ('いちご', 200),
    ('バナナ', 300),
    ('パイナップル', 400),
    ('みかん', 500),
    ('ぶどう', 600)
]

with open('sample.data', 'w') as f:
    pprint.pprint(a, stream=f)

出力結果:

sample.data

[('りんご', 100),
('いちご', 200),
('バナナ', 300),
('パイナップル', 400),
('みかん', 500),
('ぶどう', 600)]

同じフォルダ内にsample.dataが作成されて出力結果が書き出されているのが確認できます。このようにpprintでファイルに出力するにはstreamで指定します。

まとめ

Pythonのpprintを使って出力結果の整形をして出力する方法について解説しました。このようにprint( )関数での出力結果が長文になり見にくい時などにpprintで設定して出力すると綺麗に表示されます。以上、Pythonでpprintの使い方についてでした。

Udemyの動画学習でもPythonを勉強しよう!

「平日の夜の勉強会には時間が間に合わなくて参加できない」「通勤時間のわずかな隙間時間を勉強時間にあてたい」「本ではよく分からないところを動画で理解を深めたい」そんなあなたはUdemyの動画学習がお勧めです!

UdemyのPythonおすすめ33講座レビューリスト
HOSL

Author HOSL

More posts by HOSL