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中创建和显示进度条,你可以根据你的具体需求和目标平台来选择最适合你的方法。 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/30236.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

《STM32 HAL库》小米微电机控制例程——通信协议分析及驱动库

之前有段时间因为机器狗项目的缘故&#xff0c;一直在使用小米微电机&#xff0c;但是苦于没有一个详尽的奶妈级教程&#xff0c;在控制电机的学习中踩了不少的坑。今天咱们就从头至尾一步一步的实现使用按键控制小米微电机。本文将会分析小米电机驱动库&#xff0c;并简要介绍…

Spring Boot 项目中的如何序列化日期格式字符串(对象转JSON的日期字符串格式)

在Spring Boot 项目中, 将Bean序列化为一个JSON字符串的时候, 对于日期类型的属性, 可以直接在属性上使用@JsonFormat即可达成, 但是如果属性本身就是一个日期的字符串, 要输出为另外格式字符串要如何实现呢? @JsonFormat 转换 Timestamp 类型的属性 @JsonFormat注…

linux系统中,pwd获取当前路径,dirname获取上一层路径;不使用 ../获取上一层路径

在实际项目中&#xff0c;我们通常可以使用 pwd 来获取当前路径&#xff0c;但是如果需要获取上一层路径&#xff0c;有不想使用 …/ 的方式&#xff0c;可以尝试使用 dirname指令 测试shell脚本 #!/bin/bash# 获取当前路径 CURRENT_PATH$PWD echo "CURRENT_PATH$CURREN…

练手代码之使用Python实现合并PDF文件

如果你有合并PDF的需要&#xff0c;你会怎么办 我们无所不能的程序员会选择写一个Python代码来实现&#xff08;谁会这么无聊&#xff1f;是我&#xff09;&#xff0c;如果真的有PDF操作需要&#xff0c;我推荐你使用PDF Expert这个软件哈~ 话不多说直接上代码&#xff1a; …

【Ruby简单脚本01】查看wifi密码

脚本 # 使用io库 def get_cmd_result(cmd) IO.popen(cmd,:external_encoding>GBK).read.encode("utf-8") end def list_wifi wifi_pwds Hash.new # 获取所有wifi文件 o1 get_cmd_result("netsh wlan show profiles") # 获取所有匹配结果 …

Linux操作系统学习:day05

内容来自&#xff1a;Linux介绍 视频推荐&#xff1a;[Linux基础入门教程-linux命令-vim-gcc/g -动态库/静态库 -makefile-gdb调试]( 目录 day0530、删除用户31、添加和删除用户组创建用户组删除用户组 32、修改密码33、使用tar工具进行压缩和解压缩压缩解压缩 34、使用zip u…

增强大型语言模型(LLM)可访问性:深入探究在单块AMD GPU上通过QLoRA微调Llama 2的过程

Enhancing LLM Accessibility: A Deep Dive into QLoRA Through Fine-tuning Llama 2 on a single AMD GPU — ROCm Blogs 基于之前的博客《使用LoRA微调Llama 2》的内容&#xff0c;我们深入研究了一种称为量化低秩调整&#xff08;QLoRA&#xff09;的参数高效微调&#xff0…

单片机第五季-第八课:STM32CubeMx和FreeRTOS

1&#xff0c;FreeRTOS背景介绍 RTOS简介&#xff1a; 实时操作系统&#xff0c;本用于追求实时性的嵌入式系统&#xff0c;典型&#xff1a;ucos/uclinux/vxworks&#xff1b; 特点&#xff1a;中断响应快、一般可嵌套中断、使用实地址、多任务&#xff1b; &#xff08;实…

Qt6视频播放器项目框架代码

视频播放的关键代码如下: 使用Qt6的QMediaPlayer,QVideoWidget实现 void FunnyWidget::initVideo() {player = new QMediaPlayer(this);videoWidget = new QVideoWidget(this);playButton = new QPushButton("Play", this);pauseButton = new QPushButton("…

项目的打包

一:打包到微信小程序 1)vscode打包 2)在微信小程序开发工具中打开路径,上传. 疑问:为什么pnpm bulid:mp-weixin用于打包,pnpm dev:mp-weixin也可生成对应路径下的文件?? 打包的是没有热重载,且打包体积更小. 二:条件编译 vscode可以打包成能在不同平台上运行的代码.但是有…

404、左叶子之和

题解&#xff1a;可以采用后序递归遍历的方式&#xff0c;先将左右子树的左叶子节点值计算出来&#xff0c;最后相加。 当遍历到左叶子节点的父节点时就开始处理&#xff0c;将左叶子节点的值记录下来。 代码如下&#xff1a; class Solution { public:int sumOfLeftLeaves(…

算法金 | 再见!!!梯度下降(多图)

大侠幸会&#xff0c;在下全网同名「算法金」 0 基础转 AI 上岸&#xff0c;多个算法赛 Top 「日更万日&#xff0c;让更多人享受智能乐趣」 接前天 李沐&#xff1a;用随机梯度下降来优化人生&#xff01; 今天把达叔 6 脉神剑给佩奇了&#xff0c;上 吴恩达&#xff1a;机器…

利用 Qwen-VL 进行私有化部署第一个 AI 多模态大模型

Hi~&#xff01;这里是奋斗的小羊&#xff0c;很荣幸您能阅读我的文章&#xff0c;诚请评论指点&#xff0c;欢迎欢迎 ~~ &#x1f4a5;&#x1f4a5;个人主页&#xff1a;奋斗的小羊 &#x1f4a5;&#x1f4a5;所属专栏&#xff1a;C语言 &#x1f680;本系列文章为个人学习…

【profinet】从站开发要点

目录 0、常见缩写及关键字注释 1、profinet简介 2、profinet协议栈 3、profinet数据帧 4、profinet网络解决方案示例 5、Application areas 注&#xff1a;本文主要简述profinet从站开发涉及到的知识点。【不足之处后续慢慢补充】。 0、常见缩写及关键字注释 MRP: Media…

Spring中IOC容器

IoC IOC容器 IoC是一种设计思想&#xff0c;面向对象编程 Spring通过IoC管理所有Java对象的实例化和初始化&#xff0c;控制对象之间依赖关系 将IoC容器管理的Java对象称为Spring Bean&#xff0c;与new创建的对象没有区别 控制反转&#xff08;IoC Inversion of Controle&a…

宏观必读:数智化、气候能源、多极化趋势并存,如何获得转型性增长?

关键词速读&#xff1a; 双转型——创新主导的 “新质生产力”正加速推动中国产业的数字化和绿色低碳“双转型”。 双引擎——企业借助“技术创新”和“生态创新”两大引擎&#xff0c;乘势而上&#xff0c;赢得未来机遇。 生成式 AI 与大模型爆发式发展正在引发计算、开发、交…

《Linux运维总结:prometheus+altermanager+webhook-dingtalk配置文件详解》

总结&#xff1a;整理不易&#xff0c;如果对你有帮助&#xff0c;可否点赞关注一下&#xff1f; 更多详细内容请参考&#xff1a;《Linux运维篇&#xff1a;Linux系统运维指南》 一、prometheus配置文件 Prometheus的配置文件是prometheus.yml&#xff0c;在启动时指定相关的…

对于补码的个人理解

1. 十进制的取模计算 现在我想要使另一个数加上2后用8取模后也等于1&#xff0c;这个数可以是哪些&#xff1f; 这个问题比较简单&#xff0c;只需要-1加上8的倍数即可 例如&#xff1a; 如果我们想要得到距离-1这个负数最近的一个正数7&#xff0c;直接使用-18即可。反过来想…

【LeetCode刷题】面试题 17.19. 消失的两个数字

1. 题目链接2. 题目描述3. 解题方法4. 代码 1. 题目链接 面试题 17.19. 消失的两个数字 2. 题目描述 3. 解题方法 例子假设&#xff1a; 数组A元素为 &#xff1a;1 &#xff0c;4&#xff0c;5 缺少的元素为&#xff1a;2&#xff0c; 3 那么所有整数就为1 ~ 5&#xff…