St_Hakky’s blog

Data Science / Human Resources / Web Applicationについて書きます

[Python] reprlibを使って出力文字列の長さを制限する

こんにちは。

最近pythonを勉強していて、こうやって出力を返せば良いのかと納得したのがあったので、それについて紹介します。

◯出力はしたいが、長さは制限したい

debugとかをする際に、値の出力はしたいんだけど、その出力が長すぎるのもいやだみたいなときって結構あると思います(データを出力させたいときなど)。

例えば、1万個あるような配列なのだけど、最初の数個だけ以下のような感じで出力したいというようなシーンです。

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

これをうまくやってくれる、reprlibというのを知ったので、メモがてら紹介します。

◯reprlibの中身

reprlibに関する詳細な説明は公式のドキュメントを見てほしいのですが、簡単に説明すると以下のような機能やクラスを持ちます。

名称 説明
reprlib.Repr 各オブジェクトの表示方法を指定することが出来るclass。ここからサブクラスとかを作って、カスタマイズさせたい場合は、これを使用する
reprlib.aRepr reprlib.repr関数を提供するinstance。この属性の値を変えると、
reprlib.repr これを使って、出力の長さを制限する
@reprlib.recursive_repr(fillvalue="...") 再帰的な出力が合った場合に出力数を制限するデコレーター

いろいろできますが、基本はデフォルトの出力でいいと思うので、reprlib.repr()関数を使う感じでいいと思います。

◯reprlibの使い方

基本的な使い方は以下のような感じで、使います。

from reprlib import repr
many_item_list = [i for i in range(100)]
repr(many_item_list)

# 出力
# '[0, 1, 2, 3, 4, 5, ...]'

普通に出力したらばかみたいに100個の要素が帰ってきちゃうので、これは便利ですね。

次に、出力する長さの制限を変えてみたいと思います。

from reprlib import Repr
sample_repr = Repr()
sample_repr.maxlist = 10
sample_repr.repr(many_item_list)

# 出力
# '[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, ...]'

ここではmaxlistを変えましたが、他の属性についても変えることができます。それについては、ソースコードのclass:Reprの属性値をみるか、ドキュメントを見ればわかります。

自分でクラスの__repr__を実装するときとかにこれをつかうと、便利ですね。

それでは。