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盘的大概介绍࿱…...
给【AI硬件】创业者的论文、开源项目和产品整理
一、AI 硬件精选论文 《DrEureka: Language Model Guided Sim-To-Real Transfer》 瑜伽球上遛「狗」这项研究由宾夕法尼亚大学、 NVIDIA 、得克萨斯大学奥斯汀分校的研究者联合打造,并且完全开源。他们提出了 DrEureka(域随机化 Eureka)&am…...
模拟面试题卷二
1. 什么是JavaEE框架,你能列举一些常用的JavaEE框架吗? 答:JavaEE框架是一套用于开发企业级应用的技术规范和工具集合。常用的JavaEE框架有Spring、Hibernate、Struts、JSF等。 2. 请解释一下面向对象技术和设计原则是什么,你能…...
22种常用设计模式示例代码
文章目录 创建型模式结构型模式行为模式 仓库地址https://github.com/Xiamu-ssr/DesignPatternsPractice 参考教程 refactoringguru设计模式-目录 创建型模式 软件包复杂度流行度工厂方法factorymethod❄️⭐️⭐️⭐️抽象工厂abstractfactory❄️❄️⭐️⭐️⭐️生成器bui…...
Java面试题:对比ArrayList和LinkedList的内部实现,以及它们在不同场景下的适用性
ArrayList和LinkedList是Java中常用的两个List实现,它们在内部实现和适用场景上有很大差异。下面是详细的对比分析: 内部实现 ArrayList 数据结构:内部使用动态数组(即一个可变长的数组)实现。存储方式:…...
ping: www.baidu.com: 未知的名称或服务(IP号不匹配)
我用的是VMware上的Red Hat Enterprise Linux 9,出现了能联网但ping不通外网的情况。 问题描述:设置中显示正常连接,而且虚拟机右上角有联网的图标,但不能通外网。 按照网上教程修改了/etc/resolv.conf和/etc/sysconfig/network-…...
谷神前端组件增强:子列表
谷神Ag-Grid导出Excel // 谷神Ag-Grid导出Excel let allDiscolumns detailTable.getAllDisColumns() let columnColIds columns.map(column > column.colId) let columnKeys columnColIds.filter(item > ![select, "_OPT_FIELD_"].includes(item)) detailT…...
测试cudaStream队列的深度
测试cudaStream队列的深度 一.代码二.编译运行[得出队列深度为512] 以下代码片段用于测试cudaStream队列的深度 方法: 主线程一直发任务,启一个线程cudaEventQuery查询已完成的任务,二个计数器的值相减 一.代码 #include <iostream> #include <thread> #include …...
海康威视 isecure center 综合安防管理平台任意文件上传漏洞
文章目录 前言声明一、漏洞描述二、影响版本三、漏洞复现四、修复方案 前言 海康威视是以视频为核心的智能物联网解决方案和大数据服务提供商,业务聚焦于综合安防、大数据服务和智慧业务。 海康威视其产品包括摄像机、多屏控制器、交通产品、传输产品、存储产品、门禁产品、消…...
shadertoy-安装和使用
一、安装vscode 安装vscode流程 二、安装插件 1.安装glsl编辑插件 2.安装shader toy插件 三、创建glsl文件 test.glsl文件 float Grid(float size, vec2 fragCoord) {vec2 r fragCoord / size;vec2 grid abs(fract(r - 0.5) - 0.5) / fwidth(r);float line min(grid…...
matlab线性多部法求常微分方程数值解
用Adamas内差二步方法,内差三步方法,外差二步方法,外差三步方法这四种方法计算。 中k为1和2. k为2和3 代码 function chap1_adams_methodu0 1; T 2; h 0.1; N T/h; t 0:h:T; solu exact1(t);f f1; u_inter_2s adams_inter_2steps(…...
wordpress安卓源码/专业seo外包
6 分组注释 从图1中可以看出,“编辑菜单”的第六部分主要是分组注释。该项的作用是设置指定数据包的注释。点击该选项,会弹出如图8所示的对话框。 图8 分组注释对话框 在对话框中可以添加对该数据包的注释,通过再次点击“分组注释”选项会显…...
怎么免费做自己的网站/合肥百度推广公司哪家好
先来介绍下 media,确切的说应该是 CSS media queries(CSS 媒体查询),媒体查询包含了一个媒体类型和至少一个使用如宽度、高度和颜色等媒体属性来限制样式表范围的表达式。CSS3 加入的媒体查询使得无需修改内容便可以使样式应用于某…...
c语言也能干大事网站开发/武汉搜索推广
总体介绍 业务进行营销活动目的是用最少的钱实现更好的营销效果,此时就需要针对营销活动的资格进行控制,其中就包括了用户身份、用户所处的环境等等一系列因素的考虑,且为了防止恶意套取营销费用和做到营销效果的持续性,会进行活…...
重庆建设工程交易中心/许昌seo公司
前面介绍了一些Go语言的基础,但要想对Go语言有深入的理解,还要学习加事件才行。本号给大家推荐几本必读教程。Go语言是最近几年流行起来的语言,该语言有谷歌发明,并得到广泛的应用。Go语言最大的特点是并发支持度好,而…...
做网站的设计尺寸/免费域名注册永久
Python在行的开头使用间距来确定代码块何时开始和结束。你可以得到的错误是: 意外的缩进。这行代码在开始时比前一行有更多空格,但前一行不是子块的开头(例如if / while / for语句)。块中的所有代码行必须以完全相同的空格字符串开…...
代做苹果证书网站/360网站安全检测
写 Python 代码最好的方式莫过于使用集成开发环境(IDE)了。它们不仅能使你的工作更加简单、更具逻辑性,还能够提升编程体验和效率。关于IDE更多的介绍这里就不多做赘述,不太清楚的小伙伴可以baidu一下! 初级开发者往往…...