web-dev-qa-db-ja.com

pythonファイルの読み取り時にtqdm barを列挙しますか?

このコードを使用して開いたファイルを繰り返すと、tqdmの進行状況バーが表示されません。

        with open(file_path, 'r') as f:
        for i, line in enumerate(tqdm(f)):
            if i >= start and i <= end:
                print("line #: %s" % i)
                for i in tqdm(range(0, line_size, batch_size)):
                    # pause if find a file naed pause at the currend dir
                    re_batch = {}
                    for j in range(batch_size):
                        re_batch[j] = re.search(line, last_span)

ここでtqdmを使用する正しい方法は何ですか?

7
Wei Wu

あなたは正しい軌道に乗っています。 tqdmを正しく使用していますが、tqdmを使用している場合、ループ内の各行を印刷するのをやめてください。次のように、他のループではなく、最初のforループでtqdmを使用することもできます。

with open(file_path, 'r') as f:
    for i, line in enumerate(tqdm(f)):
        if i >= start and i <= end:
            for i in range(0, line_size, batch_size):
                # pause if find a file naed pause at the currend dir
                re_batch = {}
                for j in range(batch_size):
                    re_batch[j] = re.search(line, last_span)

enumerateおよびtqdmでの使用法に関するいくつかの注意事項 here

私もこれに遭遇しました-ファイルオブジェクトの行数が提供されていないため、tqdmはプログレスバーを表示していません。

forループは、行を反復し、次の改行文字が見つかるまで読み取ります。

tqdmにプログレスバーを追加するには、まずファイルをスキャンして行数をカウントし、それをtotalとしてtqdmに渡す必要があります。

from tqdm import tqdm

num_lines = sum(1 for line in open('myfile.txt','r'))
with open('myfile.txt','r') as f:
    for line in tqdm(f, total=num_lines):
        print(line)
4
user1446308