0

这不是一个真正的问题,而是代码的改进,并且可能会帮助其他人,因为我已经想出了一个简单的解决方法。

我想知道如何从模块“tqdm”中为进度条提供总输入,而不是像“手动更新”函数 tqdm.update() 所需的增量。

所以我需要知道这一点的主要原因是来自模块“pytube”的YouTube下载器来显示下载进度。当我调用 .download() 函数时,就我而言,它将通过获取数据并调用自定义“progressFunction”来运行一个while循环,并将剩余的字节数作为输入。使用等于文件大小的全局变量,我可以计算下载的总进度,即文件大小减去剩余的大小,从而允许记录进度。现在在这种情况下,如果来自 tqdm 的进度条接受这个总进度,那就太好了,但同样, .update() 只接受迭代次数的增量。

于是我在_tqdm.py代码中做了一些搜索,发现之前的迭代变量存储在self.n中。所以增量可以这样计算:inc = new_iter - pbar.n,其中pbar是一个tqdm进度条实例。

这是一个类似功能的示例代码来说明它。它有一个 while 循环函数,它不返回任何内容,但将输入提供给另一个函数。如果需要,复制并粘贴它,它将显示一个从 0 到 100 的简单进度条。

import time
from tqdm import tqdm

def functExec(a):
    global pbar
    a_prev = pbar.n
    step_tqdm = a-a_prev
    pbar.update(step_tqdm)

def functLoop(functExec,range,step):
    a = 0 
    while a<range:
        a += step
        functExec(a)
        time.sleep(0.02)

N = 100
step = 1
pbar = tqdm(total=N/step)
functLoop(functExec,range=N,step=step)
pbar.close()

所以你可以看到 pbar 是一个 tqdm 进度条实例。这在调用 while 循环之前被初始化。在函数“functLoop”中,变量“a”使用“while 循环”从 0 循环到 100,并调用“functExec”,更新进度条。您会注意到 pbar.n 被调用,它是 pbar在更新之前的迭代值。要获得增量,只需调用 a-pbar.n,并使用 .update() 函数更新此 pbar。

结论:是的,它就像我想要的那样工作,但我想知道我是否可以使用变量“a”直接将进度条分配给总进度,而不是先使用步骤。

仍然希望它对你们中的一些人有所帮助,因为我在网上找不到如何做到这一点,所以搜索了 4 个多小时 :)

编辑:TLDR:简而言之,假设您想从 0 迭代到 100 并使用 tqdm 记录进度,但在您只能获得当前迭代值总进度的情况下。我设法展示了这段代码的进度,但只是想知道“tqdm”模块中是否有内置函数。当前的源代码只允许增量更改进度条。必须有这样一个函数是有道理的,因为您使用“total”参数初始化 tqdm 对象的大小,并且可以直接使用当前总进度轻松计算进度。

4

0 回答 0