C-merのブログ

ザ・雑記

#tqdmを黙らせる (tqdmの無効化する・表示させない方法)

Python一生わからないC-merです。

PythonでProgress barを表示させる上でお世話になることの多いtqdmですが、出力結果をテキストファイルに書き出したくなった時、出力を無効化・非表示化したいと思ったので、メモといった感じで解決法をまとめていきたいと思います。

tqdmとは

tqdmはリストといったイテラブル (Iterable) のイテレーションの進捗状況を良しなに表示してくてるものです。

from tqdm import tqdm
for i in tqdm(range(1000)):
    pass
100%|██████████████████████████████████| 1000/1000 [00:00<00:00, 2345678.90it/s]

tqdmというおおよそ英語では見かけなさそうな文字列は、実はアラビア語由来でそのままprogressと意味みたいです。1 一応スペイン語の略語で"I love you so much"という意味にもなるそうです。

tqdm単体を黙らせる

tqdmクラスにはdisableというパラメータが含まれますので、これをTrueにすればtqdmを黙らせられます。

for i in tqdm(range(1000), disable=True):
    pass



こんなまわりくどいことをせずにtqdmを外せばいいです。

全てのtqdmを黙らせる

全てのtqdmを1つ1つ黙らせるわけではなく黙らせたいこともあると思いますが、このdisableはコンストラクタで初期化されているため、適当にtqdm.disable=Trueみたいなことをしても何も起こりません。

そこでこちらを参考にfunctoolsのpartialmethodでメソッド (ここではコンストラクタ) を上書きしてあげます。

from functools import partialmethod
tqdm.__init__ = partialmethod(tqdm.__init__, disable=True)

なんということでしょう。全てのtqdmが黙ります。

このfunctoolsは結構便利っぽいので他にも応用が効かせられそう。


  1. もしやと思い調べて見たところ、ヘブライ語でのprogressはהתקדם (hitkadem) ということで、語源は同じっぽいです。セム語族最強💪