使用ProgressBar显示值而不是Bar

时间:2018-01-24 18:54:19

标签: python progress-bar

我的python程序的一部分是将(csv)文件的内容加载到列表中。由于此文件很大,我想添加一些有关它的进度数据。这就是我现在正在做的事情:

def loadFile(infilepath):
    answer = []
    with open(infilepath) as infile:
        for progress,row in enumerate(csv.reader(infile), 1):
            if not progress%10000:
                progress = format(progress, ',')
                print(progress, '\b'*len(progress), sep='', end='', flush=True)
            answer.append(doStuffWith(row))
    return answer

print("Loading Data... ", end='', flush=True)
data = loadData('path/to/file')

通常情况下,我会将print(progress, '\b'*len(progress), ...)替换为print(progress, '\r', ...),将光标移回到行首。但这不是一个选项,因为行的起点被"Loading Data... "所抵消。有人告诉我,我可以使用progressbar2,但我似乎无法弄清楚如何编写实际值,而不是进度条。

我很感激这方面的帮助

1 个答案:

答案 0 :(得分:1)

使用自定义小部件:

import time
from progressbar import ProgressBar, FormatLabel, UnknownLength

def transform(n):
    return format(n, ',')

widget = FormatLabel('Loading Data... %(value)s')
widget.mapping = {**widget.mapping, 'value': ('value', transform)}
with ProgressBar(widgets=[widget], max_value=UnknownLength) as bar:
    for i in range(1, 1234):
        time.sleep(0.001)
        bar.update(i)