pprintモジュールを使うと、Pythonの任意のデータ構造をインタープ リタへの入力で使われる形式にして``pretty-print''できます。 フォーマット化された構造の中にPythonの基本的なタイプではないオブジェクト があるなら、表示できないかもしれません。 Pythonの定数として表現できない多くの組み込みオブジェクトと同様、ファイ ル、ソケット、クラスあるいはインスタンスのようなオブジェクトが含まれてい た場合は出力できません。
可能であればオブジェクトをフォーマット化して1行に出力しますが、与えられ た幅に合わないなら複数行に分けて出力します。 無理に幅を設定したいなら、PrettyPrinterオブジェクトを作成して明 示してください。
pprintモジュールには1つのクラスが定義されています:
...) |
streamキーワードで出力ストリームを設定できます;このストリームに対
して呼び出されるメソッドはファイルプロトコルのwrite()メソッドだ
けです。
もし設定されなければ、PrettyPrinterはsys.stdout
を使用しま
す。
さらに3つのパラメータで出力フォーマットをコントロールできます。
そのキーワードはindent、depthとwidthです。
再帰的なレベルごとに加えるインデントの量はindentで設定できます;デ フォルト値は1です。 他の値にすると出力が少しおかしく見えますが、ネスト化されたところが見分け 易くなります。
出力されるレベルはdepthで設定できます; 出力されるデータ構造が深いなら、指定以上の深いレベルのものは"..."で 置き換えられて表示されます。 デフォルトでは、オブジェクトの深さを制限しません。
widthパラメータを使うと、出力する幅を望みの文字数に設定できます; デフォルトでは80文字です。 もし指定した幅にフォーマットできない場合は、できるだけ近づけます。
>>> import pprint, sys >>> stuff = sys.path[:] >>> stuff.insert(0, stuff[:]) >>> pp = pprint.PrettyPrinter(indent=4) >>> pp.pprint(stuff) [ [ '', '/usr/local/lib/python1.5', '/usr/local/lib/python1.5/test', '/usr/local/lib/python1.5/sunos5', '/usr/local/lib/python1.5/sharedmodules', '/usr/local/lib/python1.5/tkinter'], '', '/usr/local/lib/python1.5', '/usr/local/lib/python1.5/test', '/usr/local/lib/python1.5/sunos5', '/usr/local/lib/python1.5/sharedmodules', '/usr/local/lib/python1.5/tkinter'] >>> >>> import parser >>> tup = parser.ast2tuple( ... parser.suite(open('pprint.py').read()))[1][1][1] >>> pp = pprint.PrettyPrinter(depth=6) >>> pp.pprint(tup) (266, (267, (307, (287, (288, (...))))))
PrettyPrinterクラスにはいくつかの派生する関数が提供されていま す:
object[, indent[, width[, depth]]]) |
object[, stream[, +indent[, width[, depth]]]]) |
sys.stdout
に出力します。
これは対話型のインタープリタ上で、求める値をprintする代わりに
使用できます。
indent、widthと、depthはPrettyPrinterコンス
トラクタにフォーマット指定引数として渡されます。
>>> stuff = sys.path[:] >>> stuff.insert(0, stuff) >>> pprint.pprint(stuff) [<Recursion on list with id=869440>, '', '/usr/local/lib/python1.5', '/usr/local/lib/python1.5/test', '/usr/local/lib/python1.5/sunos5', '/usr/local/lib/python1.5/sharedmodules', '/usr/local/lib/python1.5/tkinter']
object) |
>>> pprint.isreadable(stuff) False
object) |
さらにもう1つ、関数が定義されています:
object) |
>>> pprint.saferepr(stuff) "[<Recursion on list with id=682968>, '', '/usr/local/lib/python1.5', '/usr/loca l/lib/python1.5/test', '/usr/local/lib/python1.5/sunos5', '/usr/local/lib/python 1.5/sharedmodules', '/usr/local/lib/python1.5/tkinter']"