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
的进度条主要用于命令行工具,并且可能不如tqdm
或rich
那么灵活。不过,如果你正在开发一个命令行工具,它可能是个不错的选择。
以下是一个使用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中创建和显示进度条,你可以根据你的具体需求和目标平台来选择最适合你的方法。
相关文章:
python实现进度条的方法和实现代码
在Python中,有多种方式可以实现进度条。这里,我将介绍七种常见的方法:使用tqdm(这是一个外部库,非常流行且易于使用)、rich、click、progressbar2等库以及纯Python的print函数与time库来模拟进度条。 目录…...

被拷打已老实!面试官问我 #{} 和 ${} 的区别是什么?
引言:在使用 MyBatis 进行数据库操作时,#{} 和 ${} 的区别是面试中常见的问题,对理解如何在 MyBatis 中安全有效地处理 SQL 语句至关重要。正确使用这两种占位符不仅影响应用的安全性,还涉及到性能优化。 题目 被拷打已老实&…...
C# —— while循环语句
作用 让顺序执行的代码 可以停下来 循环执行某一代码块 // 条件分支语句: 让代码产生分支 进行执行 // 循环语句 : 让代码可以重复执行 语法 while循环 while (bool值) { 循环体(条件满足时执行的代码块) …...
力扣第205题“同构字符串”
在本篇文章中,我们将详细解读力扣第205题“同构字符串”。通过学习本篇文章,读者将掌握如何使用哈希表来解决这一问题,并了解相关的复杂度分析和模拟面试问答。每种方法都将配以详细的解释,以便于理解。 问题描述 力扣第205题“…...
探索RESTful API开发,构建可扩展的Web服务
介绍 当我们浏览网页、使用手机应用或与各种互联网服务交互时,我们经常听到一个术语:“RESTful API”。它听起来很高深,但实际上,它是构建现代网络应用程序所不可或缺的基础。 什么是RESTful API? 让我们将RESTful …...
苹果安卓网页的H5封装成App的应用和原生开发的应用有什么不一样?
H5封装类成App的应用和原生应用有什么不一样?——一对比谈优缺点 1. 开发速度和复用性 H5封装的App优势:一次编写,多平台运行。你只需要使用一种语言编写代码,就可以发布到不同的平台,降低开发成本。 原生应用优势&…...

IO流2.
字符流-->字符流的底层其实就是字节流 public class Stream {public static void main(String[] args) throws IOException {//1.创建对象并关联本地文件FileReader frnew FileReader("abc\\a.txt");//2.读取资源read()int ch;while((chfr.read())!-1){System.out…...

详解MySQL中的PERCENT_RANK函数
目录 1. 引入1. 基本使用2:分组使用3:处理重复值4. 使用优势4.1 手动计算百分等级4.2 使用 PERCENT_RANK 的优势4.3 使用 PERCENT_RANK 5. 总结 在 MySQL 中,PERCENT_RANK 函数用于计算一个值在其分组中的百分等级。 它的返回值范围是从 0 …...
宏任务与微任务
一、宏任务 1、概念 指消息队列中等地被主线程执行的事件 2、种类 script主代码块、setTimeout 、setInterval 、nodejs的setImmediate 、MessageChannel(react的fiber用到)、postMessage、网络I/O、文件I/O、用户交互的回调等事件、UI渲染事件&#x…...

昇思大模型学习·第一天
mindspore快速入门回顾 导入mindspore包 处理数据集 下载mnist数据集进行数据集预处理 MnistDataset()方法train_dataset.get_col_names() 打印列名信息使用create_tuple_iterator 或create_dict_iterator对数据集进行迭代访问 网络构建 mindspore.nn: 构建所有网络的基类用…...
python调用chatgpt
简单写了一下关于文本生成接口的调用,其余更多的调用方法可在官网查看 import os from dotenv import load_dotenv, find_dotenv from openai import OpenAI import httpxdef gpt_config():# 为了安全起见,将key写到当前项目根目录下的.env文件中# find…...

YOLOV8 目标检测:训练自定义数据集
1、下载 yolov8项目:ultralytics/ultralytics:新增 - PyTorch 中的 YOLOv8 🚀 > ONNX > OpenVINO > CoreML > TFLite --- ultralytics/ultralytics: NEW - YOLOv8 🚀 in PyTorch > ONNX > OpenVINO > CoreM…...
动态更新自建的Redis连接池连接数量
/*** 定时更新Redis连接池信息,防止资源让费*/private static final ScheduledThreadPoolExecutor DYNAMICALLY_UPDATE_REDIS_POOL_THREAD new ScheduledThreadPoolExecutor(1, new ThreadFactory() {Overridepublic Thread newThread(Runnable r) {Thread thread …...

浅谈设计师的设计地位
在当今这个创意无限的时代,设计师的地位日益凸显。他们以独特的视角和精湛的技能,为我们的生活带来了无尽的色彩与灵感。然而,随着行业的不断发展,设计师如何在众多同行中脱颖而出,提升自己的设计地位呢?答…...

C/C++ string模拟实现
1.模拟准备 1.1因为是模拟string,防止与库发生冲突,所以需要命名空间namespace隔离一下,我们来看一下基本内容 namespace yx {class string{private://char _buff[16]; lunix下小于16字节就存buff里char* _str;size_t _size;size_t _capac…...
微信小程序学习(八):behaviors代码复用
小程序的 behaviors 方法是一种代码复用的方式,可以将一些通用的逻辑和方法提取出来,然后在多个组件中复用,从而减少代码冗余,提高代码的可维护性。 如果需要 behavior 复用代码,需要使用 Behavior() 方法,…...
【The design pattern of Attribute-Based Dynamic Routing Pattern (ADRP)】
In ASP.NET Core, routing is one of the core functionalities that maps HTTP requests to the corresponding controller actions. While “Route-Driven Design Pattern” is a coined name for a design pattern, we can construct a routing-centric design pattern base…...

2713. 矩阵中严格递增的单元格数
题目 给定一个 m x n 的整数矩阵 mat,我们需要找出从某个单元格出发可以访问的最大单元格数量。移动规则是可以从当前单元格移动到同一行或同一列的任何其他单元格,但目标单元格的值必须严格大于当前单元格的值。需要返回最大可访问的单元格数量。 示例…...
git创建子模块
有种情况我们经常会遇到:某个工作中的项目需要包含并使用另一个项目。 也许是第三方库,或者你独立开发的,用于多个父项目的库。 现在问题来了:你想要把它们当做两个独立的项目,同时又想在一个项目中使用另一个。 Git …...

把Deepin塞进U盘,即插即用!Deepin To Go来袭
前言 小伙伴之前在某篇文章下留言说:把Deepin塞进U盘的教程。 这不就来了吗? 事实是可以的。这时候你要先做点小准备: 一个大小为8GB或以上的普通U盘 一个至少64GB或以上的高速U盘 一个Deepin系统镜像文件 普通U盘的大概介绍࿱…...
Python|GIF 解析与构建(5):手搓截屏和帧率控制
目录 Python|GIF 解析与构建(5):手搓截屏和帧率控制 一、引言 二、技术实现:手搓截屏模块 2.1 核心原理 2.2 代码解析:ScreenshotData类 2.2.1 截图函数:capture_screen 三、技术实现&…...
【Java学习笔记】Arrays类
Arrays 类 1. 导入包:import java.util.Arrays 2. 常用方法一览表 方法描述Arrays.toString()返回数组的字符串形式Arrays.sort()排序(自然排序和定制排序)Arrays.binarySearch()通过二分搜索法进行查找(前提:数组是…...

【入坑系列】TiDB 强制索引在不同库下不生效问题
文章目录 背景SQL 优化情况线上SQL运行情况分析怀疑1:执行计划绑定问题?尝试:SHOW WARNINGS 查看警告探索 TiDB 的 USE_INDEX 写法Hint 不生效问题排查解决参考背景 项目中使用 TiDB 数据库,并对 SQL 进行优化了,添加了强制索引。 UAT 环境已经生效,但 PROD 环境强制索…...

使用分级同态加密防御梯度泄漏
抽象 联邦学习 (FL) 支持跨分布式客户端进行协作模型训练,而无需共享原始数据,这使其成为在互联和自动驾驶汽车 (CAV) 等领域保护隐私的机器学习的一种很有前途的方法。然而,最近的研究表明&…...
基于服务器使用 apt 安装、配置 Nginx
🧾 一、查看可安装的 Nginx 版本 首先,你可以运行以下命令查看可用版本: apt-cache madison nginx-core输出示例: nginx-core | 1.18.0-6ubuntu14.6 | http://archive.ubuntu.com/ubuntu focal-updates/main amd64 Packages ng…...

ios苹果系统,js 滑动屏幕、锚定无效
现象:window.addEventListener监听touch无效,划不动屏幕,但是代码逻辑都有执行到。 scrollIntoView也无效。 原因:这是因为 iOS 的触摸事件处理机制和 touch-action: none 的设置有关。ios有太多得交互动作,从而会影响…...

RNN避坑指南:从数学推导到LSTM/GRU工业级部署实战流程
本文较长,建议点赞收藏,以免遗失。更多AI大模型应用开发学习视频及资料,尽在聚客AI学院。 本文全面剖析RNN核心原理,深入讲解梯度消失/爆炸问题,并通过LSTM/GRU结构实现解决方案,提供时间序列预测和文本生成…...

什么是Ansible Jinja2
理解 Ansible Jinja2 模板 Ansible 是一款功能强大的开源自动化工具,可让您无缝地管理和配置系统。Ansible 的一大亮点是它使用 Jinja2 模板,允许您根据变量数据动态生成文件、配置设置和脚本。本文将向您介绍 Ansible 中的 Jinja2 模板,并通…...
Java求职者面试指南:Spring、Spring Boot、MyBatis框架与计算机基础问题解析
Java求职者面试指南:Spring、Spring Boot、MyBatis框架与计算机基础问题解析 一、第一轮提问(基础概念问题) 1. 请解释Spring框架的核心容器是什么?它在Spring中起到什么作用? Spring框架的核心容器是IoC容器&#…...
在 Spring Boot 项目里,MYSQL中json类型字段使用
前言: 因为程序特殊需求导致,需要mysql数据库存储json类型数据,因此记录一下使用流程 1.java实体中新增字段 private List<User> users 2.增加mybatis-plus注解 TableField(typeHandler FastjsonTypeHandler.class) private Lis…...