8.18. pprint —データプリティプリンター—Pythonドキュメント

提供:Dev Guides
< PythonPython/docs/2.7/library/pprint
移動先:案内検索

8.18。 pprint —データプリティプリンター

ソースコード: :source: `Lib / pprint.py`



pprint モジュールは、インタプリタへの入力として使用できる形式で任意のPythonデータ構造を「きれいに印刷」する機能を提供します。 フォーマットされた構造に基本的なPythonタイプではないオブジェクトが含まれている場合、表現はロードできない可能性があります。 これは、ファイル、ソケット、クラス、インスタンスなどのオブジェクトや、Python定数として表現できない他の多くの組み込みオブジェクトが含まれている場合に当てはまります。

フォーマットされた表現は、可能であればオブジェクトを1行に保持し、許可された幅に収まらない場合は複数の行に分割します。 幅の制約を調整する必要がある場合は、 PrettyPrinter オブジェクトを明示的に作成します。

バージョン2.5で変更:辞書は、表示が計算される前にキーでソートされます。 2.5より前は、辞書は、その表示に複数の行が必要な場合にのみソートされていましたが、それは文書化されていませんでした。


バージョン2.6で変更: set および frozenset のサポートが追加されました。


pprint モジュールは、次の1つのクラスを定義します。

class pprint.PrettyPrinter(indent=1, width=80, depth=None, stream=None)

PrettyPrinter インスタンスを作成します。 このコンストラクターは、いくつかのキーワードパラメーターを理解します。 出力ストリームは、 stream キーワードを使用して設定できます。 ストリームオブジェクトで使用される唯一のメソッドは、ファイルプロトコルのwrite()メソッドです。 指定しない場合、 PrettyPrintersys.stdoutを採用します。 フォーマットされた表現を制御するために、3つの追加パラメーターを使用できます。 キーワードは、インデント深さ、およびです。 各再帰レベルに追加されるインデントの量は、 indent で指定されます。 デフォルトは1です。 他の値を使用すると、出力が少し奇妙に見える可能性がありますが、ネストを見つけやすくすることができます。 印刷できるレベルの数は、深度によって制御されます。 印刷されるデータ構造が深すぎる場合、次に含まれるレベルは...に置き換えられます。 デフォルトでは、フォーマットされるオブジェクトの深さに制約はありません。 必要な出力幅は、 width パラメーターを使用して制限されます。 デフォルトは80文字です。 構造が制限された幅内でフォーマットできない場合は、最善の努力が払われます。

>>> import pprint
>>> stuff = ['spam', 'eggs', 'lumberjack', 'knights', 'ni']
>>> stuff.insert(0, stuff[:])
>>> pp = pprint.PrettyPrinter(indent=4)
>>> pp.pprint(stuff)
[   ['spam', 'eggs', 'lumberjack', 'knights', 'ni'],
    'spam',
    'eggs',
    'lumberjack',
    'knights',
    'ni']
>>> tup = ('spam', ('eggs', ('lumberjack', ('knights', ('ni', ('dead',
... ('parrot', ('fresh fruit',))))))))
>>> pp = pprint.PrettyPrinter(depth=6)
>>> pp.pprint(tup)
('spam', ('eggs', ('lumberjack', ('knights', ('ni', ('dead', (...)))))))

PrettyPrinter クラスは、いくつかの派生関数をサポートしています。

pprint.pformat(object, indent=1, width=80, depth=None)

オブジェクトのフォーマットされた表現を文字列として返します。 インデント深さは、フォーマットパラメーターとして PrettyPrinter コンストラクターに渡されます。

バージョン2.4で変更:パラメーターインデント深さが追加されました。

pprint.pprint(object, stream=None, indent=1, width=80, depth=None)

オブジェクトのフォーマットされた表現をストリームに出力し、その後に改行を続けます。 ストリームNoneの場合、sys.stdoutが使用されます。 これは、値を検査するための print ステートメントの代わりに、対話型インタープリターで使用できます。 インデント深さは、フォーマットパラメーターとして PrettyPrinter コンストラクターに渡されます。

>>> import pprint
>>> stuff = ['spam', 'eggs', 'lumberjack', 'knights', 'ni']
>>> stuff.insert(0, stuff)
>>> pprint.pprint(stuff)
[<Recursion on list with id=...>,
 'spam',
 'eggs',
 'lumberjack',
 'knights',
 'ni']

バージョン2.4で変更:パラメーターインデント深さが追加されました。

pprint.isreadable(object)

オブジェクトのフォーマットされた表現が「読み取り可能」であるか、または eval()を使用して値を再構築するために使用できるかどうかを判別します。 これは、再帰オブジェクトに対して常にFalseを返します。

>>> pprint.isreadable(stuff)
False
pprint.isrecursive(object)
object が再帰的表現を必要とするかどうかを判別します。

もう1つのサポート関数も定義されています。

pprint.saferepr(object)

再帰的なデータ構造から保護されたオブジェクトの文字列表現を返します。 オブジェクトの表現が再帰エントリを公開する場合、再帰参照は<Recursion on typename with id=number>として表されます。 表現は他の方法でフォーマットされていません。

>>> pprint.saferepr(stuff)
"[<Recursion on list with id=...>, 'spam', 'eggs', 'lumberjack', 'knights', 'ni']"

8.18.1。 PrettyPrinterオブジェクト

PrettyPrinter インスタンスには次のメソッドがあります。

PrettyPrinter.pformat(object)
オブジェクトのフォーマットされた表現を返します。 これは、 PrettyPrinter コンストラクターに渡されるオプションを考慮に入れています。
PrettyPrinter.pprint(object)
構成されたストリームにオブジェクトのフォーマットされた表現を出力し、その後に改行を続けます。

次のメソッドは、同じ名前の対応する関数の実装を提供します。 新しい PrettyPrinter オブジェクトを作成する必要がないため、インスタンスでこれらのメソッドを使用する方が少し効率的です。

PrettyPrinter.isreadable(object)
オブジェクトのフォーマットされた表現が「読み取り可能」であるかどうか、または eval()を使用して値を再構築するために使用できるかどうかを判別します。 これにより、再帰オブジェクトに対してFalseが返されることに注意してください。 PrettyPrinterdepth パラメーターが設定されていて、オブジェクトが許可されているよりも深い場合、Falseが返されます。
PrettyPrinter.isrecursive(object)
オブジェクトが再帰的表現を必要とするかどうかを判別します。

このメソッドは、サブクラスがオブジェクトを文字列に変換する方法を変更できるようにするためのフックとして提供されています。 デフォルトの実装は、 saferepr()実装の内部を使用します。

PrettyPrinter.format(object, context, maxlevels, level)

文字列としての object のフォーマットされたバージョン、結果が読み取り可能かどうかを示すフラグ、および再帰が検出されたかどうかを示すフラグの3つの値を返します。 最初の引数は、提示されるオブジェクトです。 2つ目は、現在のプレゼンテーションコンテキストの一部であるオブジェクト(プレゼンテーションに影響を与えるオブジェクトの直接および間接コンテナ)の id()をキーとして含む辞書です。 context ですでに表されているオブジェクトを提示する必要がある場合、3番目の戻り値はTrueである必要があります。 format()メソッドを再帰的に呼び出すと、このディクショナリにコンテナのエントリが追加されます。 3番目の引数 maxlevels は、要求された再帰の制限を示します。 要求された制限がない場合、これは0になります。 この引数は、変更せずに再帰呼び出しに渡す必要があります。 4番目の引数 level は、現在のレベルを示します。 再帰呼び出しには、現在の呼び出しよりも小さい値を渡す必要があります。

バージョン2.3の新機能。


8.18.2。 pprintの例

この例は、 pprint()関数とそのパラメーターのいくつかの使用法を示しています。

>>> import pprint
>>> tup = ('spam', ('eggs', ('lumberjack', ('knights', ('ni', ('dead',
... ('parrot', ('fresh fruit',))))))))
>>> stuff = ['a' * 10, tup, ['a' * 30, 'b' * 30], ['c' * 20, 'd' * 20]]
>>> pprint.pprint(stuff)
['aaaaaaaaaa',
 ('spam',
  ('eggs',
   ('lumberjack',
    ('knights', ('ni', ('dead', ('parrot', ('fresh fruit',)))))))),
 ['aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa', 'bbbbbbbbbbbbbbbbbbbbbbbbbbbbbb'],
 ['cccccccccccccccccccc', 'dddddddddddddddddddd']]
>>> pprint.pprint(stuff, depth=3)
['aaaaaaaaaa',
 ('spam', ('eggs', (...))),
 ['aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa', 'bbbbbbbbbbbbbbbbbbbbbbbbbbbbbb'],
 ['cccccccccccccccccccc', 'dddddddddddddddddddd']]
>>> pprint.pprint(stuff, width=60)
['aaaaaaaaaa',
 ('spam',
  ('eggs',
   ('lumberjack',
    ('knights',
     ('ni', ('dead', ('parrot', ('fresh fruit',)))))))),
 ['aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa',
  'bbbbbbbbbbbbbbbbbbbbbbbbbbbbbb'],
 ['cccccccccccccccccccc', 'dddddddddddddddddddd']]