Python 动态进度条实现,多个实例来展示实现方式

news2025/1/22 21:49:09

目录

1. 使用 print 函数

2. 使用 tqdm 库

3. 自定义样式

4. 多进度条

5. 嵌套进度条

6. 更新频率控制

7. 动态描述

8. 自定义回调

9. 使用 click 库

10. 使用 rich 库

文末福利


文末赠免费精品编程资料~~

在编写Python脚本时,特别是在处理长时间运行的任务或者循环迭代的过程中,向用户展示任务的执行进度是非常重要的。进度条不仅能够提高用户体验,还能让用户对程序的运行情况有一个直观的了解。这篇文章将会介绍如何在Python中实现动态进度条,并通过多个实例来展示其实现方

1. 使用 print 函数

最简单的方式是直接使用print函数来更新进度条的状态。

示例代码 1:

import timedef progress_bar(n, total, bar_length=20):    percent = float(n) / total    arrow = '-' * int(round(percent * bar_length) - 1) + '>'    spaces = ' ' * (bar_length - len(arrow))    print(f'Progress: [{arrow}{spaces}] {int(round(percent * 100))}%', end='\r')total = 50for i in range(total):    time.sleep(0.1)  # 模拟耗时操作    progress_bar(i + 1, total)print()  # 打印换行

输出结果:

Progress: [--------------------->] 100%

2. 使用 tqdm 库

tqdm 是一个非常流行的进度条库,它能够轻松地为循环添加进度条。

示例代码 2:

from tqdm import tqdmimport timetotal = 50for i in tqdm(range(total), desc="Processing"):    time.sleep(0.1)  # 模拟耗时操作

输出结果:

Processing: 100%|██████████| 50/50 [00:05<00:00,  9.82it/s]

3. 自定义样式

tqdm 支持自定义样式,比如颜色和字符。

示例代码 3:

from tqdm import tqdmimport timetotal = 50for i in tqdm(range(total), desc="Processing", bar_format="{desc}: {n_fmt}/{total_fmt} [{elapsed}<{remaining}, {rate_fmt}{postfix}]"):    time.sleep(0.1)  # 模拟耗时操作

输出结果:

Processing: 50/50 [00:05<00:00,  9.82it/s]

4. 多进度条

有时候我们需要同时跟踪多个进度条。

示例代码 4:

from tqdm import tqdmimport timewith tqdm(total=100, desc="First") as pbar1, tqdm(total=100, desc="Second") as pbar2:    for i in range(100):        time.sleep(0.05)        pbar1.update(1)        pbar2.update(1)

输出结果:

First: 100%|██████████| 100/100 [00:05<00:00, 19.31it/s]Second: 100%|██████████| 100/100 [00:05<00:00, 19.31it/s]

5. 嵌套进度条

当你的任务是分层结构时,嵌套进度条会很有用。

示例代码 5:​​​​​​

from tqdm import tqdmimport timeouter = tqdm(total=100, desc="Outer Loop")for i in outer:    inner = tqdm(total=100, desc="Inner Loop", leave=False)    for j in inner:        time.sleep(0.01)        inner.update(1)    outer.update(1)    inner.close()outer.close()

输出结果:

Outer Loop: 100%|██████████| 100/100 [00:10<00:00,  9.78it/s]

6. 更新频率控制

有时你需要控制进度条的更新频率。

示例代码 6:

from tqdm import tqdmimport timetotal = 50for i in tqdm(range(total), desc="Processing", mininterval=0.5):    time.sleep(0.1)  # 模拟耗时操作

输出结果:

Processing: 100%|██████████| 50/50 [00:05<00:00,  9.82it/s]

7. 动态描述

在循环中更新描述文本。

示例代码 7:

from tqdm import tqdmimport timetotal = 50with tqdm(total=total, desc="Starting") as pbar:    for i in range(total):        time.sleep(0.1)  # 模拟耗时操作        pbar.set_description(f"Processing {i+1}")        pbar.update(1)

输出结果:

Processing 50: 100%|██████████| 50/50 [00:05<00:00,  9.82it/s]

8. 自定义回调

可以定义一个回调函数来处理进度条的更新。

示例代码 8:​​​​​​​

from tqdm import tqdmimport timedef update_progress(progress):    print(f"Progress: {progress}% completed.", end="\r")total = 50for i in range(total):    time.sleep(0.1)  # 模拟耗时操作    update_progress(int((i + 1) / total * 100))print()  # 打印换行

输出结果:

Progress: 100% completed.

9. 使用 click 库

click 是一个用于构建命令行界面的库,也可以用来显示进度条。

示例代码 9:​​​​​​​

import clickimport timetotal = 50with click.progressbar(range(total), label='Processing') as bar:    for i in bar:        time.sleep(0.1)  # 模拟耗时操作

输出结果:

Processing 50/50 [100%]

10. 使用 rich 库

rich 是一个强大的库,可以创建美观的终端输出,包括进度条。

示例代码 10:

​​​​​​​

from rich.progress import trackimport timetotal = 50for i in track(range(total), description="Processing..."):    time.sleep(0.1)  # 模拟耗时操作

输出结果:

Processing... 100% 50/50 [00:05<00:00,  9.82it/s]

通过上述示例,你可以看到不同的方法来实现动态进度条。选择合适的方法取决于你的具体需求和场景。希望这些示例能帮助你在实际项目中有效地使用进度条功能!

文末福利

最后这里免费分享给大家一份Python全套学习资料,希望能帮到那些不满现状,想提升自己却又没有方向的朋友,也可以和我一起来学习交流呀。

包含编程资料、学习路线图、源代码、软件安装包等!【点击这里】领取!

Python所有方向的学习路线图,清楚各个方向要学什么东西
100多节Python课程视频,涵盖必备基础、爬虫和数据分析
100多个Python实战案例,学习不再是只会理论
华为出品独家Python漫画教程,手机也能学习

也可以扫描下方CSDNA官方认证二维码领取【保证100%免费

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

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

相关文章

PDF Guru Anki:一款以PDF为中心的多功能办公学习工具箱

PDF Guru Anki 是一个假想的工具箱&#xff0c;因为目前我没有关于这个具体产品的详细信息。但是&#xff0c;根据这个名字和一般的PDF工具箱功能&#xff0c;我可以想象一些可能的独特功能&#xff0c;这些功能可以包括&#xff1a; PDF 阅读器&#xff1a;提供高效的PDF阅读…

linux下的C++程序

1.安装g编译环境&#xff08;c&#xff09;、gcc编译环境&#xff08;c语言&#xff09; sudo yum install gcc或者gcc-c //安装gcc/g编译(用管理员权限弄&#xff09; 验证是否安装成功 gcc或者g --version //如果显示版本号&#xff0c;则表示安装成功 sudo yum remove g…

Go语言fmt包中print相关方法

Go语言的fmt包提供了多种打印相关的函数&#xff0c;主要用于在控制台或其他输出目标上格式化并输出数据。下面是一些常用的print相关方法的用途和区别&#xff1a; 1.fmt.Print() 功能: fmt.Print() 将参数的内容按默认格式输出到标准输出&#xff08;通常是控制台&#xff…

springcloud loadbalancer nacos无损发布

前言 故事背景 jenkins部署时总是会有几秒钟接口调用报错&#xff0c;观察日志是因为流量被下发到已下线的服务&#xff0c;重启脚本在停止应用之前先调用nacos注销实例api后再重启依然会短暂出现此问题。项目架构是springcloud alibaba,通过openfeign进行微服务之间调用&…

npm vs pnpm 之幽灵依赖

在之前的文章&#x1f4c4; 果断放弃npm切换到pnpm–节约磁盘空间&#xff08;256G硬盘救星&#xff09; 中有提及 npm 扁平化带来的幽灵&#x1f47b;依赖 问题&#xff0c;但没有特别展开&#xff0c;这段时间实际业务中遇到了该问题&#xff0c;特整理如下&#xff1a; ♨️…

Linux C 程序 【03】线程栈空间

1.开发背景 上一个篇章创建了线程&#xff0c;参考 FreeRTOS&#xff0c;每个线程都是有自己的内存空间&#xff0c;Linux上面也是一样的&#xff0c;这个篇章主要描述线程栈空间的设置。 2.开发需求 设计实验&#xff1a; 1&#xff09;创建线程&#xff0c;并配置线程内存大…

充电桩--直流充电桩方案详解

一、直流充电桩介绍 1、直流充电桩介绍 电动汽车市场数量的不断激增&#xff0c;为缓解消费者对其里程焦虑与充电焦虑&#xff0c;配置双向OBC可以实现快速充电&#xff0c;还可将电动汽车当作分布式储能站回馈电网帮助消峰填谷&#xff0c;通过DCFC为电动汽车高效充电&#…

【解决错误】ModuleNotFoundError: No module named ‘progress’

【解决错误】ModuleNotFoundError: No module named ‘progress’ 在Python编程中&#xff0c;遇到“ModuleNotFoundError: No module named ‘progress’”这类错误&#xff0c;通常意味着Python解释器在其环境中找不到名为‘progress’的模块。以下将深入探讨这一错误的产生…

HBM2、HBM2E、HBM3和HBM3E技术

HBM(High Bandwidth Memory)是一种高性能的内存技术,主要用于数据中心、超级计算机、高端服务器、图形处理器(GPU)和AI加速器等领域,因为它能够提供比传统DDR内存更高的带宽和更低的功耗。 HBM2、HBM2E、HBM3和HBM3E技术 HBM2 (High Bandwidth Memory 2) HBM2 是HBM技术…

深入JVM:类加载器和双亲委派模型

目录 1. 什么是类加载器2. 类加载器的类型3. 双亲委派模型4. 类装载的过程加载验证准备解析初始化使用卸载 1. 什么是类加载器 如果想要了解什么是类加载器就需要清楚一个Java文件是如何运行的。我们可以看下图&#xff1a; 首先要知道操作系统是不能直接运行Java文件的&#…

大模型Transformer架构详解

深度学习领域正在经历一场剧烈的变革&#xff0c;这得益于Transformer模型的诞生和迅速发展。 这些开创性的架构不仅重新定义了自然语言处理&#xff08;NLP&#xff09;的标准&#xff0c;还极大地拓宽了人工智能的多个领域。 凭借其独特的注意力机制和并行处理能力&#xf…

目录的读写

一、文件流和字符描述的转换 1.1、fileno 要求的是内存大小一致 fileno FILE* fp -> int fd fgets(,); int fileno(FILE *stream); 功能: 获得一个文件流指针中的文件描述符 参数: stream:文件流指针 返回值: 成功返回文件描述符 失败返回-1 如果没有特殊要求的&…

如何在Zoom中集成自己的app?一个简单的例子

一、注册zoom 账号、以便在zoom app maketplace创建app。 二、安装git、node.js、vscode开发环境&#xff08;略&#xff09;。 三、注册ngrok账号&#xff0c;获得一个免费的https静态域名。 四、配置zoom app(wxl)&#xff0c;设置上一步获得的https静态域名&#xff0c;验证…

2024 年 7 月区块链游戏研报:市场波动与数据分化的挑战与机遇

作者&#xff1a;Stella L (stellafootprint.network) 数据来源&#xff1a;Footprint Analytics 游戏研究页面 7 月份&#xff0c;加密货币市场波动显著&#xff0c;价格表现各异。比特币和 Solana 表现抢眼&#xff0c;与此同时&#xff0c;以太坊在美国市场推出现货以太坊…

8.3 字符串中等 306 Additive Number 423 Reconstruct Original Digits from English

306 Additive Number //累加数&#xff1a;除了前两个数&#xff0c;其余数都等于前两个加起来&#xff0c;至少包括三个数 //难点找到前两个数 //条件1&#xff1a;至少包括三个数–>确定前两个数字的最大长度 len n/3 看下方注意1 //条件2&#xff1a;遇到0默认归属于他…

Axure RP界面设计初探:基础操作与实用技巧

Axure RP是目前流行的设计精美的用户界面和交互软件。Axure RP提供了一组丰富的RP。 UI 控件&#xff0c;这些控件根据它们的应用领域进行分类。作为Axure的国产替代品&#xff0c;它可以在线协同工作&#xff0c;浏览器可以在不下载客户端的情况下立即打开和使用。如果以前用A…

护眼灯到底有没有用?一文曝光护眼灯的三大好处!

护眼台灯进入大众的视野&#xff0c;但种类多样&#xff0c;其质量也是参差不齐。不少人一直有着”护眼灯到底有没有用&#xff1f;“质疑&#xff0c;作为学生&#xff0c;课业多且繁重&#xff0c;再加上电子设备普遍普及&#xff0c;眼睛受承受的压力日渐增大。因此&#xf…

如何快速实现MODBUS TCP转Profinet——泗博网关EPN-330

泗博网关EPN-330可作为PROFINET从站&#xff0c;支持与西门子S7-200 SMART/300/400/1200/1500全系列PLC以及具有PROFINET主站的系统无缝对接&#xff0c;而Modbus TCP端&#xff0c;可以与Modbus TCP从站设备、主站PLC、DCS系统以及组态软件等进行数据交互。 通过EPN-330&…

【算法设计题】编写算法,统计带头节点的单链表L的实际元素个数,第5题(C/C++)

目录 第5题 统计带头节点的单链表L的实际元素个数 得分点&#xff08;必背&#xff09; 题解&#xff1a;统计带头节点的单链表L的实际元素个数 代码解答 详细解释 举例说明 &#x1f308; 嗨&#xff0c;我是命运之光&#xff01; &#x1f30c; 2024&#xff0c;每日百…

第二证券:沪指涨0.31%,电力、煤炭等板块拉升,卫星导航概念活跃

7日早盘&#xff0c;沪指盘中发力上扬&#xff0c;深证成指、创业板指震荡翻绿&#xff0c;场内超2700只个股飘绿。 到午间收盘&#xff0c;沪指涨0.31%报2876.17点&#xff0c;深证成指跌0.04%&#xff0c;创业板指跌0.16%&#xff0c;上证50指数涨0.34%&#xff0c;两市算计…