読者です 読者をやめる 読者になる 読者になる

ぼろぼろ平原

困った

Pythonで大きいファイルを読み込む時に進捗を表示

この記事のPython版。

http://tatzyr.hatenablog.com/entry/2016/07/13/144906

tatzyr.hatenablog.com

進捗を表示するためには、ファイル全体の行数かファイルサイズが必要になる。

ファイルの行数を取得するにはファイルを一度全部読み込む必要があり、大きいファイルだと時間がかかるのでダメ。

一方、ファイルのサイズはos.path.getsizeを使えば一瞬で取得できる。 また、組み込み関数のlenを使うと読み込んだ読み込んだオブジェクトの長さが取得できるので、現在の進捗が計算できる。

プログレスバーの表示には tqdm を使う。

tqdmのインストール

$ pip install tqdm

進捗を表示するプログラム

from tqdm import tqdm
import os

# 大きいファイルのファイル名
filename = "sugoku_dekai_file.txt"

# ファイルのサイズを取得
filesize = os.path.getsize(filename)

# ファイルを開く
with open(filename) as f:
    # ファイルのサイズを使用しプログレスバーを作成
    with tqdm(total=filesize) as pbar:
        # 行ごとに処理
        for line in f:
            # 読み込んだ行をbytesに変換して長さを取得
            read_size = len(line.encode('utf-8'))
            # lineに対して何か処理
            foo(line)
            # 進捗を更新
            pbar.update(size)