【python进度条】Python实现进度条的几种方法

devtools/2024/11/27 9:52:08/

python进度条

  • 方法一:使用print()函数实现文本进度条
  • 方法二:使用tqdm库
  • 方法三:使用progress库
  • 方法四:使用alive-progress库
  • 方法五:使用rich库
  • 方法六:自定义图形进度条
  • 总结

在Python编程中,进度条是一种常用的工具,用于向用户展示程序的执行状态和进度。本文将介绍几种实现进度条的方法,适合新手小白理解,并通过简单的示例来帮助你掌握这些技巧。

方法一:使用print()函数实现文本进度条

最基本的方式是通过打印文本来显示进度条。这种方法不依赖任何额外的库。

示例代码

python">import time
import sysdef print_progress_bar(iteration, total, prefix='', length=50):percent = (iteration / total) * 100filled_length = int(length * iteration // total)bar = '█' * filled_length + '-' * (length - filled_length)sys.stdout.write(f'\r{prefix} |{bar}| {percent:.2f}% Complete')sys.stdout.flush()# 示例用法
total_steps = 100
for i in range(total_steps + 1):print_progress_bar(i, total_steps)time.sleep(0.1)print()  # 换行,以便最后输出后换行

解释在这个例子中,print_progress_bar函数负责计算进度并打印进度条。sys.stdout.writesys.stdout.flush用于动态更新同一行的输出。

方法二:使用tqdm库

tqdm是一个非常流行且强大的进度条库,能够轻松地在循环中添加进度条。
示例代码

python">from tqdm import tqdm
import time# 示例用法
total_steps = 100
for i in tqdm(range(total_steps)):time.sleep(0.1)  # 模拟工作

解释在这个示例中,我们只需将range传给tqdm,它会自动为我们生成进度条。tqdm库提供了丰富的功能,还可以显示估计剩余时间等信息。

方法三:使用progress库

progress库也是一个用于创建进度条的库,提供不同样式和自定义选项。
示例代码

python">from progress.bar import Bar
import time# 示例用法
total_steps = 100
bar = Bar('Processing', max=total_steps)for i in range(total_steps):time.sleep(0.1)  # 模拟工作bar.next()       # 更新进度
bar.finish()         # 完成

解释
在这个例子中,我们使用Bar类创建一个进度条,并在每次迭代时调用next()方法来更新进度,最后调用finish()表示完成。

方法四:使用alive-progress库

alive-progress是另一个美观且易用的进度条库,支持动画效果。
示例代码

python">from alive_progress import alive_bar
import time# 示例用法
total_steps = 100
with alive_bar(total_steps) as bar:for i in range(total_steps):time.sleep(0.1)  # 模拟工作bar()            # 更新进度

解释
在这个例子中,我们使用alive_bar来创建进度条,它可以自动处理刷新和清理,非常方便。

方法五:使用rich库

rich库不仅可以用于创建进度条,还可以为终端输出增加丰富的格式和样式。

示例代码

python">from rich.progress import Progress
import time# 示例用法
total_steps = 100
with Progress() as progress:task = progress.add_task("Processing...", total=total_steps)for i in range(total_steps):time.sleep(0.1)  # 模拟工作progress.update(task, advance=1)  # 更新进度

解释
在这个例子中,我们创建了一个带有任务的进度条,可以轻松地对进度进行更新。

方法六:自定义图形进度条

如果你想要更具个性化的进度条,可以自己实现一个图形进度条。例如,使用字符或图形符号来表示进度。
示例代码

python">import time
import sysdef custom_progress_bar(iteration, total, length=40):percent = (iteration / total) * 100filled_length = int(length * iteration // total)bar = '#' * filled_length + '-' * (length - filled_length)sys.stdout.write(f'\r[{bar}] {percent:.2f}%')sys.stdout.flush()# 示例用法
total_steps = 100
for i in range(total_steps + 1):custom_progress_bar(i, total_steps)time.sleep(0.1)print()  # 换行

解释
在这个例子中,我们自定义了一个进度条,使用#符号来表示已完成的部分,-符号表示未完成的部分,最终输出百分比。

总结

通过以上六种方法,你可以灵活地在Python中实现进度条。在实际开发中,可以根据需求选择合适的实现方式,从简单的文本进度条到功能丰富的第三方库,满足不同场景的需求。希望这篇文章能帮助你更好地理解如何实现进度条。


http://www.ppmy.cn/devtools/137360.html

相关文章

社交电商专业赋能高校教育与产业协同发展:定制开发AI智能名片及2+1链动商城小程序的创新驱动

摘要:本文围绕社交电商有望成为高校常态专业这一趋势展开深入探讨,剖析国家政策认可下其学科发展前景,着重阐述在专业建设进程中面临的师资短缺及实践教学难题。通过引入定制开发AI智能名片与21链动商城小程序,探究如何借助这些新…

构建与优化数据仓库-实践指南

数仓构建流程 下图为MaxCompute数据仓库构建的整体流程。 基本概念 在正式学习本教程之前,您需要首先理解以下基本概念: 业务板块:比数据域更高维度的业务划分方法,适用于庞大的业务系统。 维度:维度建模由Ralph Ki…

org.apache.log4j的日志记录级别和基础使用Demo

org.apache.log4j的日志记录级别和基础使用Demo,本次案例展示,使用是的maven项目,搭建的一个简单的爬虫案例。里面采用了大家熟悉的日志记录插件,log4j。来自apache公司的开源插件。 package com.qian.test;import org.apache.log…

Vue.js - 组件化编程

1. 前言 Vue.js是一个基于组件的Javascript框架,组件化编程是核心思想之一。通过组件化,Vue允许开发者将用户页面拆分成独立,可重用的部分,从而提升代码的可维护性,可读性以及可服用性。 本文主要讲解在Vue2中组件化…

快速高效求素数|质数的方法—Java(模板)

判断素数|质数方法时间效率:线性筛法>埃氏筛法>试除法 在写算法题的时候,各种各样跟素数有关的题目非常常见,本文列出了三种常见的判断素数的方法 三种求素数方法的优缺点 一、试除法 试除法的基本思想是:判断一个数 x 是否为素数&…

【算法一周目】滑动窗口(2)

目录 水果成篮 解题思路 代码实现 找到字符串中所有字母异位词 解题思路 代码实现 串联所有单词的子串 解题思路 代码实现 最小覆盖子串 解题思路 代码实现 水果成篮 题目链接:904. 水果成篮 题目描述: 你正在探访一家农场,农场…

【IEEE出版 | ISBN: 979-8-3315-0796-1 | 高录用稳检索】 2025神经网络与智能优化国际研讨会(NNIO 2025)

【IEEE出版 | ISBN: 979-8-3315-0796-1 | 高录用稳检索】 2025神经网络与智能优化国际研讨会(NNIO 2025) 2025 Neural Networks and Intelligent Optimization 重要信息 大会时间:2025年1月10-12日 一轮截稿:2024年11月30日23:59 会议地…

从Full-Text Search全文检索到RAG检索增强

从Full-Text Search全文检索到RAG检索增强 时光飞逝,转眼间六年过去了,六年前铁蛋优化单表千万级数据查询性能的场景依然历历在目,铁蛋也从最开始做CRUD转行去了大数据平台开发,混迹包装开源的业务,机缘巧合下做了实时…