当前位置: 首页 > news >正文

python实现进度条的方法和实现代码

在Python中,有多种方式可以实现进度条。这里,我将介绍七种常见的方法:使用tqdm(这是一个外部库,非常流行且易于使用)、rich、click、progressbar2等库以及纯Python的print函数与time库来模拟进度条。

目录

一、使用tqdm库

二、使用纯Python实现

三、使用rich库

四、使用click库 

五、使用progressbar2库

六、使用PySimpleGUI库 

七、使用curses库(Unix/Linux)


一、使用tqdm

首先,你需要安装tqdm库。你可以使用pip来安装:

pip install tqdm

然后,你可以使用以下代码来显示进度条: 

from tqdm import tqdm  
import time  # 模拟一个需要花费时间的任务  
for i in tqdm(range(100)):  time.sleep(0.01)  # 假设每个迭代需要0.01秒

在这个例子中,tqdm会自动处理进度条的显示,你不需要做其他任何事情。每次迭代时,进度条都会更新。 

效果:

10%|█         | 10/100 [00:01<00:09,  9.98it/s]

二、使用纯Python实现

如果你不想使用外部库,你也可以使用Python的print函数和time库来模拟一个简单的进度条。但是请注意,这种方法没有tqdm那么灵活和强大。

以下是一个简单的例子:

import time  
import sys  def print_progress_bar(iteration, total, prefix='', suffix='', decimals=1, length=100, fill='█', printEnd="\r"):  """  Call in a loop to create terminal progress bar  @params:  iteration   - Required  : current iteration (Int)  total       - Required  : total iterations (Int)  prefix      - Optional  : prefix string (Str)  suffix      - Optional  : suffix string (Str)  decimals    - Optional  : positive number of decimals in percent complete (Int)  length      - Optional  : character length of bar (Int)  fill        - Optional  : bar fill character (Str)  printEnd    - Optional  : end character (e.g. "\r", "\r\n") (Str)  """  percent = ("{0:." + str(decimals) + "f}").format(100 * (iteration / float(total)))  filledLength = int(length * iteration // total)  bar = fill * filledLength + '-' * (length - filledLength)  print(f'\r{prefix} |{bar}| {percent}% {suffix}', end=printEnd)  # Print New Line on Complete  if iteration == total:   print()  # 模拟一个需要花费时间的任务  
for i in range(100):  time.sleep(0.01)  # 假设每个迭代需要0.01秒  print_progress_bar(i + 1, 100, prefix='Progress:', suffix='Complete', length=50)

在这个例子中,print_progress_bar函数用于打印进度条。它接受当前迭代次数、总迭代次数和其他一些可选参数。在每次迭代中,我们调用这个函数来更新进度条。注意,我们在循环结束后添加了一个额外的换行符,以便在进度条完成后清除终端中的最后一行。 

除了使用tqdm库和纯Python的print函数与time库来模拟进度条之外,还有其他几种方法可以实现进度条。这里我将介绍两种额外的方法:

三、使用rich

rich库是一个用于创建丰富文本和漂亮终端输出的Python库,它也包括了一个强大的进度条功能。

首先,你需要安装rich库:

pip install rich

然后,你可以使用以下代码来显示进度条: 

from rich.progress import Progress  
import time  with Progress() as progress:  task = progress.add_task("Processing...", total=100)  for i in range(100):  time.sleep(0.01)  # 假设每个迭代需要0.01秒  progress.update(task, advance=1)

效果:

Processing... ███████████▏                                  50/100 [00:04<00:04, 11.97it/s]

 

四、使用click库 

click库是一个用于创建命令行接口的库,它也提供了一个简单的进度条实现。

首先,你需要安装click库:

pip install click

但是,请注意,click的进度条主要用于命令行工具,并且可能不如tqdmrich那么灵活。不过,如果你正在开发一个命令行工具,它可能是个不错的选择。

以下是一个使用click库的简单示例:

import click  
import time  @click.command()  
def cli():  with click.progressbar(range(100)) as bar:  for item in bar:  time.sleep(0.01)  # 假设每个迭代需要0.01秒  if __name__ == '__main__':  cli()

在这个例子中,我们定义了一个cli函数,并使用click.progressbar上下文管理器来包装一个范围。在每次迭代中,进度条会自动更新。

以上介绍了四种不同的方法来实现Python中的进度条:使用tqdm库、纯Python的print函数与time库、rich库和click库。每种方法都有其优缺点,你可以根据你的具体需求来选择最适合你的方法。如果你需要一个简单且易于使用的库,tqdm可能是一个很好的选择。如果你需要更丰富的终端输出和更多的控制选项,rich可能更适合你。如果你正在开发一个命令行工具,并且需要进度条功能,那么click可能是一个好选择。

当然,还有其他方法可以实现Python中的进度条,尽管它们可能不如前面提到的库那样全面或易于使用。以下是一些额外的方法:

五、使用progressbar2

progressbar2是另一个流行的库,用于在Python中创建进度条。虽然它的功能可能与tqdm相似,但如果你更喜欢这个库,可以尝试使用它。

首先,你需要安装progressbar2库:

pip install progressbar2

然后,你可以使用以下代码来显示进度条: 

from progressbar import ProgressBar  
import time  bar = ProgressBar(max_value=100)  
for i in range(100):  time.sleep(0.01)  # 假设每个迭代需要0.01秒  bar.update(i + 1)  
bar.finish()

六、使用PySimpleGUI库 

PySimpleGUI是一个用于创建图形用户界面(GUI)的库,但它也支持在控制台应用程序中显示进度条。这个库非常适合那些希望在控制台应用程序中添加更多交互性的用户。

首先,你需要安装PySimpleGUI库:

pip install pysimplegui

然后,你可以使用以下代码来显示一个控制台进度条:

import PySimpleGUI as sg  
import time  # 创建一个进度条元素  
progress_bar = sg.ProgressBar(100, orientation='h', size=(50, 15), key='progressbar')  # 创建一个窗口,其中包含进度条  
layout = [[progress_bar]]  
window = sg.Window('Progress Bar', layout)  # 启动事件循环  
for i in range(101):  event, values = window.read(timeout=100)  progress_bar.update_bar(i + 1)  time.sleep(0.01)  # 假设每个迭代需要0.01秒  # 关闭窗口  
window.close()

七、使用curses库(Unix/Linux)

在Unix和Linux系统上,你可以使用curses库来创建文本用户界面,包括进度条。但是,请注意,curses库在Windows上不可用。

首先,你需要确保你的系统上安装了curses库(在大多数Linux发行版上都是预装的)。然后,你可以使用以下代码来显示一个基本的进度条:

import curses  
import time  def main(stdscr):  # 清除屏幕  stdscr.clear()  # 初始化颜色对(可选)  curses.start_color()  curses.init_pair(1, curses.COLOR_GREEN, curses.COLOR_BLACK)  # 创建一个进度条窗口  height, width = stdscr.getmaxyx()  progress_bar_width = 50  progress_bar_start = (height // 2) - 1  progress_bar_end = progress_bar_start + 1  for i in range(101):  # 清除进度条行  stdscr.addstr(progress_bar_start, 0, ' ' * width)  # 计算并显示进度条  filled_length = int((i / 100.0) * progress_bar_width)  stdscr.addstr(progress_bar_start, (width - progress_bar_width) // 2, '[' + '=' * filled_length + ' ' * (progress_bar_width - filled_length) + ']')  # 刷新屏幕以显示更新  stdscr.refresh()  # 模拟进度  time.sleep(0.01)  # 等待用户按键退出  stdscr.getkey()  # 使用curses包装器运行main函数  
curses.wrapper(main)

这些方法提供了不同的方式来在Python中创建和显示进度条,你可以根据你的具体需求和目标平台来选择最适合你的方法。 

相关文章:

  • 【漏洞复现】契约锁电子签章平台 add 远程命令执行漏洞(XVE-2023-23720)
  • 【代码随想录算法训练Day43】LeetCode 518.零钱兑换II、LeetCode 377.组合总和IV、LeetCode 70.爬楼梯
  • 【玩儿】TX应用宝模拟器安装第三方APK
  • PostgreSQL源码分析——口令认证
  • 多处理系统结构
  • 18张Python数据科学速查表.png
  • 教你python自动识别图文验证码的解决方案!
  • 第二章习题
  • 基于Redis提高查询性能(保持数据一致性)
  • YOLOV8 目标检测:训练自定义数据集
  • 短视频热恋进行时:成都柏煜文化传媒有限公司
  • React是什么?
  • 从治理到“智”理,打造新一代金融数据体系
  • 通义千问调用笔记
  • 使用kettle做的数据同步案例
  • Google 是如何开发 Web 框架的
  • 【MySQL经典案例分析】 Waiting for table metadata lock
  • AWS实战 - 利用IAM对S3做访问控制
  • create-react-app做的留言板
  • C语言笔记(第一章:C语言编程)
  • egg(89)--egg之redis的发布和订阅
  • HomeBrew常规使用教程
  • IndexedDB
  • java B2B2C 源码多租户电子商城系统-Kafka基本使用介绍
  • jQuery(一)
  • ⭐ Unity + OpenCV 实现实时图像识别与叠加效果
  • windows下如何用phpstorm同步测试服务器
  • 浮动相关
  • 欢迎参加第二届中国游戏开发者大会
  • 利用DataURL技术在网页上显示图片
  • 入手阿里云新服务器的部署NODE
  • d²y/dx²; 偏导数问题 请问f1 f2是什么意思
  • ​LeetCode解法汇总2182. 构造限制重复的字符串
  • ​埃文科技受邀出席2024 “数据要素×”生态大会​
  • ​卜东波研究员:高观点下的少儿计算思维
  • #我与Java虚拟机的故事#连载19:等我技术变强了,我会去看你的 ​
  • (4)事件处理——(2)在页面加载的时候执行任务(Performing tasks on page load)...
  • (Java入门)学生管理系统
  • (SpringBoot)第七章:SpringBoot日志文件
  • (vue)el-tabs选中最后一项后更新数据后无法展开
  • (二刷)代码随想录第16天|104.二叉树的最大深度 559.n叉树的最大深度● 111.二叉树的最小深度● 222.完全二叉树的节点个数
  • (附源码)springboot掌上博客系统 毕业设计063131
  • (附源码)ssm高校升本考试管理系统 毕业设计 201631
  • (附源码)计算机毕业设计SSM疫情居家隔离服务系统
  • (三)uboot源码分析
  • (删)Java线程同步实现一:synchronzied和wait()/notify()
  • (数位dp) 算法竞赛入门到进阶 书本题集
  • (顺序)容器的好伴侣 --- 容器适配器
  • (原創) X61用戶,小心你的上蓋!! (NB) (ThinkPad) (X61)
  • (源码分析)springsecurity认证授权
  • (转)GCC在C语言中内嵌汇编 asm __volatile__
  • (转)甲方乙方——赵民谈找工作
  • .NET Framework Client Profile - a Subset of the .NET Framework Redistribution
  • .Net 基于.Net8开发的一个Asp.Net Core Webapi小型易用框架
  • .net网站发布-允许更新此预编译站点