Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x CLI中的Python ProgressBar_Python 3.x_Progress Bar_Command Line Interface - Fatal编程技术网

Python 3.x CLI中的Python ProgressBar

Python 3.x CLI中的Python ProgressBar,python-3.x,progress-bar,command-line-interface,Python 3.x,Progress Bar,Command Line Interface,我正在使用Python3.x并下载了库;然而,我正在努力在我的程序中使用它。当有一个指定的范围时,一切都正常,但是如何让progressbar用我自己的代码实时更新呢?我希望进度条在文本列表的每次迭代中都会跳20%,首先显示进度条,然后在打印结果时刷新进度条 我在上还发现了另一个类似于我的问题,但我更喜欢使用progressbar2库,因为它已经存在了。考虑以下事项: import time import progressbar texts = ['a', 'b', 'c', 'd', 'e'

我正在使用Python3.x并下载了库;然而,我正在努力在我的程序中使用它。当有一个指定的范围时,一切都正常,但是如何让progressbar用我自己的代码实时更新呢?我希望进度条在文本列表的每次迭代中都会跳20%,首先显示进度条,然后在打印结果时刷新进度条

我在上还发现了另一个类似于我的问题,但我更喜欢使用progressbar2库,因为它已经存在了。考虑以下事项:

import time
import progressbar

texts = ['a', 'b', 'c', 'd', 'e']

def basic_widget_example (texts):

    widgets = [progressbar.Percentage (), progressbar.Bar ()]
    bar = progressbar.ProgressBar (widgets = widgets, max_value = len (texts)).start ()
    for i in range (len (texts)):
        print (texts [i])
        time.sleep (0.1)
        bar.update (i + 1)
    bar.finish ()
结果:

N/A%|                                                                                                               |a
 20%|######################                                                                                         |b
 40%|############################################                                                                   |c
 60%|##################################################################                                             |d
 80%|########################################################################################                       |e
 100%|###############################################################################################################|
100%|###############################################################################################################|
[1, 2, 3, 4, 5]
我希望它看起来像这样:

100%|#############################################################|
a
b                                                                                                                    
c                                                                                                                    
d                                                                                                                    
e     
一种解决方案是创建2 for循环,但正如您所看到的,progressbar显示不再准确,也不再与我的任务同步。progressbar将在不到一秒钟内显示100%,即使我的任务可能需要2分钟才能完成。你知道如何在尽可能接近准确的情况下实现这一点吗

def basic_widget_example (texts):

    widgets = [progressbar.Percentage (), progressbar.Bar ()]
    bar = progressbar.ProgressBar (widgets = widgets, max_value = len (texts)).start ()
    for i in range (len (texts)):
        # Do something
        time.sleep (0.1)
        bar.update (i + 1)
    bar.finish ()

    for text in texts:
        print (text)

我误解了进度条的用法。进度条的作用是让用户知道,计算是在不需要与用户通信的情况下进行的。它在一些字符串操作或从一组数据创建列表的情况下非常有用。一旦获得结果并准备好输出到屏幕上,此时就不需要进度条了

例如,我创建了一个1-50的整数列表,向其中添加了1(后台进程),并将其附加到另一个用于模拟输出的列表中

lst = [i for i in range (50)]
basic_widget_example (lst)

def basic_widget_example (lst):

    newlist = []

    widgets = [progressbar.Percentage (), progressbar.Bar ()]
    bar = progressbar.ProgressBar (widgets = widgets, max_value = len (lst)).start ()
    for i in range (len (lst)):
        # Do something
        newlist = [x + 1 for x in lst]
        time.sleep (0.1)
        bar.update (i + 1)
    bar.finish ()

    print (newlist [:5])
结果:

N/A%|                                                                                                               |a
 20%|######################                                                                                         |b
 40%|############################################                                                                   |c
 60%|##################################################################                                             |d
 80%|########################################################################################                       |e
 100%|###############################################################################################################|
100%|###############################################################################################################|
[1, 2, 3, 4, 5]
进度条将随着列表长度的增加而增加,列表长度由“max_值”指定为50。这将在每次迭代中产生两个“#”


还值得一提的是time.sleep(值)对应于进度条完成所需的时间。在我的示例中,50次迭代*0.1秒=5秒。这意味着progressbar将在5秒内100%完成。这不是实时的。如果是实时的,还需要进一步计算得出睡眠值。一种方法是计算每次迭代所需的时间,或者取一个平均值,并将其作为时间值。sleep。

我误解了进度条的用法。进度条的作用是让用户知道,计算是在不需要与用户通信的情况下进行的。它在一些字符串操作或从一组数据创建列表的情况下非常有用。一旦获得结果并准备好输出到屏幕上,此时就不需要进度条了

例如,我创建了一个1-50的整数列表,向其中添加了1(后台进程),并将其附加到另一个用于模拟输出的列表中

lst = [i for i in range (50)]
basic_widget_example (lst)

def basic_widget_example (lst):

    newlist = []

    widgets = [progressbar.Percentage (), progressbar.Bar ()]
    bar = progressbar.ProgressBar (widgets = widgets, max_value = len (lst)).start ()
    for i in range (len (lst)):
        # Do something
        newlist = [x + 1 for x in lst]
        time.sleep (0.1)
        bar.update (i + 1)
    bar.finish ()

    print (newlist [:5])
结果:

N/A%|                                                                                                               |a
 20%|######################                                                                                         |b
 40%|############################################                                                                   |c
 60%|##################################################################                                             |d
 80%|########################################################################################                       |e
 100%|###############################################################################################################|
100%|###############################################################################################################|
[1, 2, 3, 4, 5]
进度条将随着列表长度的增加而增加,列表长度由“max_值”指定为50。这将在每次迭代中产生两个“#”

还值得一提的是time.sleep(值)对应于进度条完成所需的时间。在我的示例中,50次迭代*0.1秒=5秒。这意味着progressbar将在5秒内100%完成。这不是实时的。如果是实时的,还需要进一步计算得出睡眠值。一个想法是计算每次迭代所需的时间,或者取一个平均值,并将其用作time.sleep的值