Python tqdm进度条总进度作为输入

时间:2018-10-22 15:28:36

标签: python progress manual tqdm pytube

这实际上不是问题,而是代码的改进,并且由于我已经找到了一种简单的解决方法,因此可能会以其他方式帮助其他人。

我想知道如何才能从模块“ tqdm”提供进度条的总输入,而不是“手动更新”功能tqdm.update()要求的增量。

所以我需要知道的主要原因是“ pytube”模块中的YouTube下载器显示了下载进度。就我而言,当我调用.download()函数时,它将通过获取数据来运行while循环,并调用一个自定义的“ progressFunction”,其余字节数作为输入。使用等于文件大小的全局变量,我可以计算下载的总进度,文件大小减去剩余大小,从而可以记录进度。现在,在这种情况下,如果来自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记录进度,但是在您只能获得当前迭代值总进度< / strong>。我设法用这段代码来显示进度,但是只是想知道“ tqdm”模块中是否有内置函数。 当前源代码仅允许递增更改进度条。之所以必须有这样的功能,是因为您可以使用“总计”参数初始化tqdm对象的大小,并且可以轻松地直接使用当前总进度来计算进度。

0 个答案:

没有答案