054. 编写一个函数,实现简单的命令行进度条

在Python中,可以通过简单的打印操作来实现一个命令行进度条。以下是一个实现简单命令行进度条的函数,它可以在执行任务时动态显示进度。

示例代码

import time
import sys

def progress_bar(total_steps, prefix="", suffix="", decimals=1, length=50, fill="█"):
    """
    简单的命令行进度条
    :param total_steps: 总步骤数
    :param prefix: 进度条前缀
    :param suffix: 进度条后缀
    :param decimals: 显示的进度小数位数
    :param length: 进度条长度(字符数)
    :param fill: 进度条填充字符
    """
    def print_progress(iteration):
        """
        打印进度条
        :param iteration: 当前步骤
        """
        percent = ("{0:." + str(decimals) + "f}").format(100 * (iteration / float(total_steps)))
        filled_length = int(length * iteration // total_steps)
        bar = fill * filled_length + '-' * (length - filled_length)
        sys.stdout.write(f"\r{prefix} |{bar}| {percent}% {suffix}")
        sys.stdout.flush()

    # 初始化进度条
    print_progress(0)
    for i in range(total_steps):
        time.sleep(0.1)  # 模拟任务执行时间
        print_progress(i + 1)
    print()  # 结束后换行

# 示例用法
if __name__ == "__main__":
    progress_bar(100, prefix="进度:", suffix="完成", length=50)

代码说明:

参数说明

  • total_steps:总步骤数,表示任务的总进度。

  • prefix:进度条前缀,用于显示进度条的描述信息。

  • suffix:进度条后缀,用于显示额外的信息。

  • decimals:进度百分比的小数位数。

  • length:进度条的长度(以字符数表示)。

  • fill:进度条的填充字符,默认为

print_progress函数

  • 计算当前进度的百分比。

  • 根据当前进度计算填充长度。

  • 使用\r(回车符)在同一行更新进度条。

  • 使用sys.stdout.writesys.stdout.flush确保进度条能够实时更新。

模拟任务执行

  • for循环中,每次循环模拟任务的执行(这里用time.sleep(0.1)模拟)。

  • 每次循环调用print_progress函数更新进度条。

结束换行

  • 任务完成后,通过print()换行,避免进度条与后续输出混在一起。

示例运行

运行代码后,你将在命令行中看到类似以下的动态进度条:

进度: |██████████████████████████████████████████████████████████████████████████| 100.0% 完成

扩展功能

如果你需要更复杂的进度条功能,比如支持多线程任务、更丰富的样式等,可以使用第三方库,如tqdm。以下是一个使用tqdm的简单示例:

pip install tqdm
from tqdm import tqdm
import time

# 示例用法
for i in tqdm(range(100), desc="进度", unit="step"):
    time.sleep(0.1)  # 模拟任务执行时间

视频讲解

BiliBili: 视睿网络-哔哩哔哩视频 (bilibili.com)