Jupyter笔记本计数器处理时

时间:2017-11-07 18:47:04

标签: python jupyter-notebook jupyter

我使用的是Jupyter Notebook和Python 3.0。

我有一段代码需要一段时间才能在Jupyter Notebook中执行并确定其当前状态,我想对它的循环进行计数,如下所示:

large_number = 1000
for i in range(large_number):
    print('{} / {} complete.'.format(i,large_number))

这个问题是它会为每次迭代打印一个新行,我不想这样做......而只是想更新该值。

无论如何我可以在Jupyter Notebook中做到这一点吗?

4 个答案:

答案 0 :(得分:3)

Jupyter中此功能的事实标准是tqdm,特别是tqdm_notebook。它使用简单,提供信息输出,并有多种选择。您也可以将它用于cli工作。

from tqdm import tqdm_notebook
from time import sleep

for i in tqdm_notebook(range(100)):
    sleep(.05)

输出将是这样的:

enter image description here

答案 1 :(得分:2)

import sys

large_number = 1000
for i in range(large_number):
    print('{} / {} complete.'.format(i,large_number), end='\r')
    sys.stdout.flush()

答案 2 :(得分:2)

我喜欢制作ascii状态栏。假设您需要运行1000次迭代,并希望在完成之前看到20次更新:

num_iter = 1000
num_updates = 20
update_per = num_iter // num_updates  # make sure it's an integer
print('|{}|'.format(' ' * (num_updates - 2)))  # gives you a reference
for i in range(num_iter):
    # code stuff
    if i % update_per == 0:
        print('*', end='', flush=True)

为您提供如下更新:

|                  |
*******

当它运行。

答案 3 :(得分:0)

我总觉得Alexander Kukushkin's Jupyter Widget对于这些事情是最好的。它创建了一个漂亮的进度条,可以处理生成器,您可以设置更新进度值的频率。

要使用它,请将github链接中的代码复制到单元格中,然后运行您的代码:

large_number = 1000
for i in log_progress(range(large_number)):
    //your code here - no need to print anything manually!