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_bytes
和total_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
对象传输完成。
我想用tqdm
来显示文件传输的进度条。但是,我无法应用 tqdm
的正常使用方式,如
t =tqdm(total=100)
for i in range(10):
t.update(10)
t.close()
原因是我有一个接收进度回调的函数,所以每次在函数内部调用回调时,它都会接收两个参数,consumed_bytes
和total_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
对象传输完成。