首页 > 解决方案 > Python progressbar2-在进度条下显示文件名

问题描述

我正在使用 progressbar2 库来显示文件下载的进度条。

我想在进度条行下方(或上方)的行中打印出当前下载文件的名称,并将每个文件名打印在同一行上。

import progressbar

format_custom_text = progressbar.FormatCustomText(
    'Downloading file:%(f)s',
    dict(
        f='',
    ),
)

bar = progressbar.ProgressBar(widgets=[
    progressbar.Counter(format='[%(value)02d/%(max_value)d]'),
    progressbar.Bar(marker=u'\u2588', fill='.', left='|', right='|'),
    format_custom_text])

for i in bar(range(len(files))):
    format_custom_text.update_mapping(f=files[i])
    client.download_file(file_path=files[i])

例子:

[25/64] |███████████████████████............................| Downloading file: dummyfile.txt

我想要的是更改文件的名称并仍然在进度条下的同一行上打印它。

[25/64] |███████████████████████............................| 

Downloading file: dummyfile.txt

标签: pythonprogress-bar

解决方案


这对我有用,在终端上:

import time
import progressbar

format_custom_text = progressbar.FormatCustomText(
    '\nDownloading file:%(f)s\033[F',
    dict(
        f='',
    ),
)

bar = progressbar.ProgressBar(widgets=[
    progressbar.Counter(format='[%(value)02d/%(max_value)d]'),
    progressbar.Bar(marker=u'\u2588', fill='.', left='|', right='|'),
    format_custom_text])
files=list(range(1000))
for i in bar(range(len(files))):
    format_custom_text.update_mapping(f=files[i])
    time.sleep(0.1)

推荐阅读