python 3.x tqdm:进度条总百分比的完成百分比

python 3.x tqdm: percentage completed over total percentage progress bar

我想用tqdm来显示文件传输的进度条。但是,我无法应用 tqdm 的正常使用方式,如

t =tqdm(total=100)
for i in range(10):
    t.update(10)
t.close()

原因是我有一个接收进度回调的函数,所以每次在函数内部调用回调时,它都会接收两个参数,consumed_bytestotal_bytes。这类似于以下代码:

def progress_bar(consumed_bytes, total_bytes):
    print(consumed_bytes, total_bytes)

file_transfer(..., progress_callback=progressbar)

因此,如果我使用以下方式来呈现进度条(上面发布的第一个代码块的修改版本):

def progress_bar (consumed_bytes, total_bytes):
    t = tqdm(total=total_bytes)
    t.update(consumed_byets)
    t.close()

file_transfer(..., progress_callback=progressbar)

控制台会打印多个进度条,如下图,

  8%|▊         | 8192/107647 [00:00<00:00, 45509587.24B/s]
 15%|█▌        | 16384/107647 [00:00<00:00, 105722271.90B/s]
 23%|██▎       | 24576/107647 [00:00<00:00, 169259794.92B/s]
 30%|███       | 32768/107647 [00:00<00:00, 194122815.64B/s]
 38%|███▊      | 40960/107647 [00:00<00:00, 213149741.74B/s]
 46%|████▌     | 49152/107647 [00:00<00:00, 372127130.34B/s]
 53%|█████▎    | 57344/107647 [00:00<00:00, 445404015.88B/s]
 61%|██████    | 65536/107647 [00:00<00:00, 336036561.06B/s]
 68%|██████▊   | 73728/107647 [00:00<00:00, 555184282.43B/s]
 76%|███████▌  | 81920/107647 [00:00<00:00, 500141752.08B/s]
 84%|████████▎ | 90112/107647 [00:00<00:00, 692229161.26B/s]
 91%|█████████▏| 98304/107647 [00:00<00:00, 744254260.68B/s]
 99%|█████████▉| 106496/107647 [00:00<00:00, 924796270.77B/s]
100%|██████████| 107647/107647 [00:00<00:00, 785224769.89B/s]

但我希望它只显示一个进度条。是否可以通过上述代码的机制只显示一个进度条?

t = tqdm(total=total_bytes)用于实例化一个tqdm对象,每实例化一个tqdm对象,就会多打印一个进度条。

所以我的建议是将此行移出 progress_bar 函数,该函数只应用于更新预实例化的 tqdm 对象,关闭文件后的 tqdm 对象传输完成。