share facebook facebook twitter menu hatena pocket slack

2018.01.10 WED

Python でお気軽にプログレスバー

川原 洋平

WRITTEN BY 川原 洋平

この記事は…

初老丸 Advent Calendar 2017 - Qiita
集え、初老丸達よ。初老丸達による世界に向けた技術的(又はそれに関連する)な物語を綴るカレンダーです。我こそ初老丸という方、初老丸予備軍の方も奮ってご参加下さい。ジーク・初老丸!

qiita.com

参加者の少ない, 初老丸 Advent Calendar 2017 14 日目の記事です.

(what)何をしたかったのか

  • Python スクリプト実行時にプログレスバーを出したかった

(why)なぜやりたかったのか

  • ながーい処理をさせる際に, ざっくりでも構わないので進捗を知りたかった

やったこと

tqdm

ググったら一瞬で出てきた.

tqdm/tqdm
tqdm - A fast, extensible progress bar for Python and CLI

github.com

ドキュメントも充実していて, Github のスターも 4700 を超えている.

Hello tqdm

試す環境は Python 3.6.2 で.

$ python --version
Python 3.6.2

tqdm のインストールは pip で済ませてある前提.

from time import sleep
from tqdm import tqdm

for i in tqdm(range(10)):
    sleep(0.1)

range() を tqdm で囲んであげるだけで以下のようなプログレスバーが表示される.

いい感じ.

コマンドラインでも使える

Python のモジュールだけではなく, コマンドラインからも利用出来る.

$ tqdm --help | less
Usage:
  tqdm [--help | options]

Options:
  -h, --help     Print this help and exit
  -v, --version  Print version and exit

  --desc=<desc>  : str, optional
            Prefix for the progressbar.
...
  --buf_size=<buf_size>  : int, optional
            String buffer size in bytes [default: 256]
            used when `delim` is specified.
  --bytes=<bytes>  : bool, optional
            If true, will count bytes and ignore `delim`.

例えば, files ディレクトリ以下に 100 個のファイルを作り…

touch files/test_{1..100}.txt

そして, このファイルを ls する際にプログレスバーを出してみたりする.

$ ls files/* | tqdm --unit_scale --total $(ls files/* | wc -l) > /dev/null

実行すると以下のように表示される.

tar で固めた大量ファイルを展開する時とかに使えそう.

以上

README を見ていると Jupyter でも使えるようだし, Python でスクリプトを作る際には必ず用意したいモジュールの 1 つになると思う.

元記事はこちら

Python でお気軽にプログレスバー

cloudpack

cloudpackは、Amazon EC2やAmazon S3をはじめとするAWSの各種プロダクトを利用する際の、導入・設計から運用保守を含んだフルマネージドのサービスを提供し、バックアップや24時間365日の監視/障害対応、技術的な問い合わせに対するサポートなどを行っております。
AWS上のインフラ構築およびAWSを活用したシステム開発など、案件のご相談はcloudpack.jpよりご連絡ください。