我使用的是Jupyter Notebook和Python 3.0。
我有一段代码需要一段时间才能在Jupyter Notebook中执行并确定其当前状态,我想对它的循环进行计数,如下所示:
large_number = 1000
for i in range(large_number):
print('{} / {} complete.'.format(i,large_number))
这个问题是它会为每次迭代打印一个新行,我不想这样做......而只是想更新该值。
无论如何我可以在Jupyter Notebook中做到这一点吗?
答案 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)
输出将是这样的:
答案 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!