Python 进度条未正确显示进度

Posted

技术标签:

【中文标题】Python 进度条未正确显示进度【英文标题】:Python progressbar is not showing progress correctly 【发布时间】:2018-10-27 16:28:02 【问题描述】:

我在 Python 中有一个进度条:

import os
def file_len(fname):
    with open(fname) as f:
        for i, l in enumerate(f):
            pass
    return i + 1

import progressbar
from time import sleep
bar = progressbar.ProgressBar(maxval=file_len(os.path.basename(__file__)), \
    widgets=[progressbar.Bar('=', '[', ']'), ' ', progressbar.Percentage()])
bar.start()
for i in range(file_len(os.path.basename(__file__))):
    bar.update(i+1)
    sleep(0.1)
bar.finish()

进度条在视觉上按预期工作:它以条形显示进度及其后面的百分比。但是进度条的计算是错误的。

它首先以增加的百分比显示条形图,但当条形图为 100% 时,程序开始运行。我在我的代码中放置了几个“打印”定义,以查看当时代码的位置,但现在我首先看到百分比条增加到 100%,然后是代码中的第一个“打印”。在此打印之后,代码开始计算。

有人知道我在这里做错了什么吗?

问候,甘尼什

编辑: 这看起来像这样

所以训练部分在 bar 为 100% 时开始。

【问题讨论】:

我猜你的print语句在进度条显示代码之后? Jep,所以首先是进度条的代码,然后是打印语句。 我不确定我是否完全理解你想要什么;如果打印语句在进度条代码之后运行,您描述的行为不是预期的吗? 杰普我一开始是这么认为的。因此,我在脚本的开头添加了进度条代码的第一部分(直到 bar.start()),并将进度条代码的最后一部分添加到脚本的末尾。然后进度条显示: [ ] N/A%I: 。然后我知道我做错了什么,但不知道是什么.. 您必须将进度条更新与真实代码联系起来;就目前而言,您只是在 sleep() 之间绘制了一个进度条,它并不代表任何实际的进度。 【参考方案1】:

Etene,我有我这里的代码。我删除了我尝试过的进度条,以便您可以尝试一下。

import os
import numpy as np
from sklearn import cross_validation
import matplotlib.pyplot as plt
import seaborn as sb
import pylab as pl
from termcolor import colored
from sklearn import datasets

""" ===================================== Create New Folders ===================================== """
def create_folder(path):
    if not os.path.exists(path):
        os.makedirs(path) 
    return path

current_dir = os.getcwd()

path_graph = create_folder(current_dir + "\\Graphs")

""" ==================================== Function Information ==================================== """

def graph_heatmap(Plot, Filename, Annot, Mask_half):

    print (colored('---- Creating Heatmap: ' + Filename, 'blue'))

    plt.gcf().clear()

    plt.subplots(figsize=(40,40))
    mask = np.zeros_like(Plot)
    mask[np.triu_indices_from(mask)] = Mask_half
    sb.heatmap(Plot, annot=Annot, mask=mask, cmap="Blues", linewidths=0.5, linecolor='black', vmin=0, vmax=1)

    pl.savefig(path_graph + '\\' + Filename + '.png', bbox_inches='tight', dpi=600)
    plt.close()

""" ================================= Importing & Filtering Files ================================ """
diabetes = datasets.load_diabetes()


""" ======================================== Data Mining ======================================== """
#Training
print (colored('---- Training', 'blue'))

X = diabetes.data[:, np.newaxis, 2]
y = diabetes.target

X_train, X_test, y_train, y_test = cross_validation.train_test_split(X, y, test_size = 0.3, random_state=25)

这个比我的小,但结构是一样的。我希望进度条在导入模数后直接开始并在最后一行结束(当一切都完成后)。

【讨论】:

以上是关于Python 进度条未正确显示进度的主要内容,如果未能解决你的问题,请参考以下文章

引导进度条未在移动视图中显示

不可见的进度条未通过代码显示

Bootstrap 4 进度条未显示

react-bootstrap 的进度条未显示

单击页面上的任意位置后,Android中的进度条未显示

如何显示ProgressBar的进度条,给分100