HoRain云--Python进度条实现全攻略
Python进度条实现方法指南 本文介绍了Python中实现进度条的多种方法,包括主流第三方库和手动实现方案。重点推荐了tqdm、alive-progress和rich三个功能强大的第三方库,并分析了各自的特点和适用场景。同时提供了基础进度条的手动实现代码和Tkinter图形界面进度条示例。文章还总结了常见应用场景和选择建议:tqdm适合常规需求,alive-progress提供酷炫动画,rich

🎬 HoRain云小助手:个人主页
🔥 个人专栏: 《Linux 系列教程》《c语言教程》
⛺️生活的理想,就是为了理想的生活!
⛳️ 推荐
前些天发现了一个超棒的服务器购买网站,性价比超高,大内存超划算!忍不住分享一下给大家。点击跳转到网站。
专栏介绍
|
专栏名称 |
专栏介绍 |
|
本专栏主要撰写C干货内容和编程技巧,让大家从底层了解C,把更多的知识由抽象到简单通俗易懂。 |
|
|
本专栏主要是注重从底层来给大家一步步剖析网络协议的奥秘,一起解密网络协议在运行中协议的基本运行机制! |
|
|
全面深入解析 docker 容器,从基础到进阶,涵盖原理、操作、实践案例,助您精通 docker。 |
|
|
本专栏主要撰写Linux干货内容,从基础到进阶,知识由抽象到简单通俗易懂,帮你从新手小白到扫地僧。 |
|
|
本专栏着重撰写Python相关的干货内容与编程技巧,助力大家从底层去认识Python,将更多复杂的知识由抽象转化为简单易懂的内容。 |
|
|
本专栏主要是发布一些考试和练习题库(涵盖软考、HCIE、HRCE、CCNA等) |
目录

在Python中为耗时操作添加进度条可以有效提升用户体验。下面我将介绍几种主流的实现方法,包括推荐的第三方库和手动实现方式。
下表快速对比了几个主流的进度条库:
|
库名 |
主要特点 |
适用场景 |
安装命令 |
|---|---|---|---|
|
tqdm |
简单高效,生态强大,文档丰富 |
绝大多数循环迭代场景,是首选方案 |
|
|
alive-progress |
动态效果丰富,视觉效果酷炫 |
终端交互、演示或需要更生动反馈的场景 |
|
|
rich |
功能全面,可美化终端整体输出 |
复杂的CLI工具,当进度条只是需求之一时 |
|
💡 第三方库推荐
tqdm
tqdm是Python社区最流行、最易用的进度条库。
基本使用:只需用 tqdm()包装任何可迭代对象即可。
from tqdm import tqdm
import time
for i in tqdm(range(100)):
time.sleep(0.01) # 模拟耗时任务
高级功能:tqdm功能非常丰富。
-
自定义描述和样式:通过参数设置前缀、进度条长度等。
for i in tqdm(range(100), desc="处理中", ncols=80, bar_format="{l_bar}{bar}| {n_fmt}/{total_fmt}"): time.sleep(0.01) -
与Pandas等库结合:为
pandas的apply操作添加进度条。import pandas as pd from tqdm import tqdm tqdm.pandas() # 激活tqdm for pandas df['new_col'] = df['col'].progress_apply(lambda x: x**2)
alive-progress
如果你追求更动态、美观的进度条,alive-progress是个不错的选择。
from alive_progress import alive_bar
import time
with alive_bar(100, title='Processing') as bar: # 使用上下文管理器
for i in range(100):
time.sleep(0.01)
bar() # 每次迭代后更新进度条
rich
如果您的项目除了进度条,还需要输出彩色文本、表格、日志等富文本内容,rich.progress模块是理想选择。
from rich.progress import Progress
import time
with Progress() as progress: # 支持多个并发任务
task1 = progress.add_task("[red]Downloading...", total=100)
task2 = progress.add_task("[green]Processing...", total=200)
while not progress.finished:
progress.update(task1, advance=0.9)
progress.update(task2, advance=0.5)
time.sleep(0.1)
🛠️ 手动实现基础进度条
理解其原理有助于更好地自定义。以下是一个基础的手动实现版本:
import sys
import time
def print_progress_bar(iteration, total, prefix='', suffix='', decimals=1, length=50, fill='█'):
"""
调用示例:
for i in range(total):
time.sleep(0.1)
print_progress_bar(i + 1, total, prefix='进度:', suffix='完成', length=50)
"""
percent = ("{0:." + str(decimals) + "f}").format(100 * (iteration / float(total)))
filled_length = int(length * iteration // total)
bar = fill * filled_length + '-' * (length - filled_length)
# 使用'\r'将光标移回行首,实现原地更新
sys.stdout.write(f'\r{prefix} |{bar}| {percent}% {suffix}')
sys.stdout.flush()
# 当任务完成时,打印一个换行符
if iteration == total:
print()
# 使用示例
total = 100
for i in range(total):
time.sleep(0.1) # 模拟耗时任务
print_progress_bar(i + 1, total, prefix='进度:', suffix='完成', length=50)
💻 图形界面进度条
对于GUI应用程序,可以使用相应的GUI工具包创建进度条。
使用Tkinter(标准库)示例:
import tkinter as tk
from tkinter import ttk
import threading
import time
def start_progress():
for i in range(101):
time.sleep(0.1)
progress_var.set(i) # 更新进度值
root.update_idletasks() # 更新GUI
root = tk.Tk()
progress_var = tk.IntVar()
progress_bar = ttk.Progressbar(root, variable=progress_var, maximum=100)
progress_bar.pack()
start_button = tk.Button(root, text="开始", command=lambda: threading.Thread(target=start_progress).start())
start_button.pack()
root.mainloop()
📊 常见应用场景
-
文件下载/上传:结合
requests库,在下载数据块时更新进度。 -
数据处理:在处理大型数据集(如使用Pandas)时显示进度。
-
模型训练:在机器学习的训练循环中显示每个epoch的进度。
如何选择?
-
追求简单高效:直接使用 tqdm,它几乎能满足所有常规需求。
-
需要酷炫动画:尝试 alive-progress。
-
开发复杂命令行工具:考虑 rich,它能让你的终端输出整体提升一个档次。
-
在GUI应用中:使用对应GUI框架(如Tkinter、PyQt)提供的进度条组件。
希望这些信息能帮助您为Python项目选择合适的进度条方案。如果您有特定的使用场景,比如是在Jupyter Notebook中还是处理多任务,我可以提供更具体的建议。
❤️❤️❤️本人水平有限,如有纰漏,欢迎各位大佬评论批评指正!😄😄😄
💘💘💘如果觉得这篇文对你有帮助的话,也请给个点赞、收藏下吧,非常感谢!👍 👍 👍
🔥🔥🔥Stay Hungry Stay Foolish 道阻且长,行则将至,让我们一起加油吧!🌙🌙🌙
更多推荐




所有评论(0)