Python 制作进度条的18种最佳实现方法
在 Python 中实现进度条可以提高程序的用户体验,尤其是在执行耗时操作时。下面是一些常用的 Python 库和方法来创建进度条:
Tqdm:
- 使用简单且功能强大的第三方库,支持命令行和 Jupyter Notebook。
- 示例:
from tqdm import tqdm for i in tqdm(range(100)): pass
Progressbar2:
- 一个灵活且可定制的进度条库。
- 示例:
from progressbar import ProgressBar pbar = ProgressBar() for i in pbar(range(100)): pass
Rich:
- 用于创建美观且丰富文本的终端显示工具,包含漂亮的进度条。
- 示例:
from rich.progress import track for i in track(range(100)): pass
Cli Progress:
- 专注于简单的命令行进度条的工具。
- 示例:
from cli_progress import ProgressBar pbar = ProgressBar(total=100) for i in range(100): pbar.update()
Alive Progress:
- 以动画形式展示进度条。
- 示例:
from alive_progress import alive_bar with alive_bar(100) as bar: for i in range(100): bar()
Yaspin:
- 创建带有旋转器的进度条。
- 示例:
from yaspin import yaspin with yaspin(text="Processing") as spinner: for _ in range(100): pass
Halo:
- 另一个用于创建旋转器和加载指示器的库。
- 示例:
from halo import Halo spinner = Halo(text='Loading', spinner='dots') spinner.start() for _ in range(100): pass spinner.stop()
Progress:
- 一个用于在命令行上显示文本进度条的简单库。
- 示例:
from progress.bar import Bar bar = Bar('Processing', max=100) for i in range(100): bar.next() bar.finish()
tqdm_notebook:
- 专为在 Jupyter Notebook 中使用的 tqdm 版本。
- 示例:
from tqdm.notebook import tqdm for i in tqdm(range(100)): pass
ipywidgets:
- 在 Jupyter Notebook 中使用的交互式小部件。
- 示例:
from ipywidgets import IntProgress, display import time progress = IntProgress(min=0, max=100) display(progress) for i in range(100): time.sleep(0.1) progress.value = i+1
Click:
- 一个用于创建命令行界面的工具,可以实现简单的进度条。
- 示例:
import click with click.progressbar(range(100)) as bar: for i in bar: pass
Tenacity:
- 更专注于重试机制的库,但可以合并进度显示。
- 适合结合其他库来扩展进度显示功能。
Loguru:
- 虽然是一个日志记录库,但可以定制格式来实现进度条功能。
- 需要手动实现进度计算。
Progressist:
- 设计简单,易于扩展。
- 示例:
from progressist import ProgressBar p = ProgressBar(total=100) for i in range(100): p.update(i+1)
Console (从 Rich 的一部分):
- 即可用于控制台输出,也可以控制进度条。
- 可通过扩展 Rich 的进度条实现复杂布局。
Textual:
- 基于文本用户界面的框架库,可以支持带有进度条的应用程序。
- 需要创建自定义应用程序来显示进度。
Ascii Bar:
- 用于在终端中显示简单的 ASCII 进度条。
- 需要一些简单的计算来更新进度。
手动实现:
- 如果不想依赖外部库,可以手动创建简单的 ASCII 或基于字符的进度显示。
- 示例:
import sys import time for i in range(101): time.sleep(0.1) sys.stdout.write(f'\rProgress: {i}%') sys.stdout.flush()
这些方法涵盖了从简单到复杂以及从文本到动画的各种实现方式。在选择最适合的实现方式时,应根据项目需求和环境选择合适的工具。