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

Python实例题:Python3实现命令行动态进度条

目录

Python实例图

题目

题目分析

需求理解

关键知识点

实现思路分析

代码实现

代码解释

progress_bar 函数:

模拟任务执行:

输出换行符:

运行思路

结束语

Python实例图

题目

Python3实现命令行动态进度条

题目分析

需求理解

需要使用 Python 3 实现一个命令行动态进度条。在命令行界面里,进度条可用来直观展现任务的完成进度,让用户能实时了解任务的执行状况。

关键知识点

  • 标准输出控制:借助 sys.stdout 来控制输出内容,并且能够实时更新输出。
  • 字符串格式化:把进度信息转换为合适的字符串格式,以显示进度条。
  • 时间控制:运用 time.sleep() 函数来模拟任务执行,同时更新进度条。

实现思路分析

  • 定义进度条格式:确定进度条的外观,像使用 [===== ] 这种形式。
  • 计算进度:依据任务的完成情况算出当前的进度百分比。
  • 更新进度条:动态更新进度条的显示,让用户能看到进度的变化。
  • 模拟任务执行:使用 time.sleep() 函数模拟任务的执行过程。

代码实现

import sys
import time


def progress_bar(progress, total):
    """
    显示动态进度条
    :param progress: 当前完成的任务量
    :param total: 总任务量
    """
    # 计算完成百分比
    percent = 100 * (progress / float(total))
    # 定义进度条长度
    bar_length = 50
    # 计算已完成部分的长度
    filled_length = int(bar_length * progress // total)
    # 生成进度条字符串
    bar = '=' * filled_length + '-' * (bar_length - filled_length)
    # 输出进度条信息
    sys.stdout.write(f'\r|{bar}| {percent:.2f}%')
    sys.stdout.flush()


# 模拟任务执行
total_tasks = 100
for i in range(total_tasks + 1):
    progress_bar(i, total_tasks)
    # 模拟任务耗时
    time.sleep(0.1)

# 输出换行符,使后续输出正常显示
print()
    

代码解释

  • progress_bar 函数

    • percent:算出当前任务的完成百分比。
    • bar_length:设定进度条的总长度。
    • filled_length:依据完成百分比算出进度条中已填充部分的长度。
    • bar:生成进度条的字符串,已完成部分用 = 表示,未完成部分用 - 表示。
    • sys.stdout.write(f'\r|{bar}| {percent:.2f}%'):把进度条信息输出到标准输出,\r 表示回到行首,实现动态更新。
    • sys.stdout.flush():强制刷新输出缓冲区,确保信息立即显示。
  • 模拟任务执行

    • total_tasks:设定总任务量。
    • for 循环:模拟任务的执行过程,每次循环调用 progress_bar 函数更新进度条。
    • time.sleep(0.1):模拟任务的耗时操作。
  • 输出换行符

    • 任务完成后,输出换行符,让后续输出能正常显示。

运行思路

  • 定义进度条函数:定义 progress_bar 函数,用来生成和更新进度条。
  • 模拟任务执行:使用 for 循环模拟任务的执行过程,每次循环更新进度条。
  • 动态显示进度:在每次循环中,调用 progress_bar 函数,把进度信息输出到标准输出,借助 \r 回到行首,实现动态更新。
  • 任务完成:任务完成后,输出换行符,结束进度条显示。

结束语

通过这个示例,你已经学会了如何使用 Python 3 实现命令行动态进度条。进度条在长时间运行的任务中非常实用,能让用户实时了解任务的执行进度。你可以根据实际需求对进度条的样式和更新频率进行调整。希望这个示例能帮助你在实际项目中更好地应用进度条。

相关文章:

  • WebGPU:前端图形技术的革命性进化与WebGL的未来
  • [ctfshow web入门] web39
  • 深入理解 RxSwift 中的 Driver:用法与实践
  • NI labview数据采集程序
  • wait 和notify ,notifyAll,sleep
  • ecovadis认证有什么好处?ecovadis认证有什么要求 有哪些勋章
  • C++函数签名
  • 工作的意义,在工作以外的地方
  • 从0到1打造一套适合自己接单的脚手架03用户登录注册
  • 触摸屏触摸坐标与画面对齐
  • 前端性能优化核弹级方案:CSS分层渲染+Wasm,首屏提速300%!
  • MySQL:事务的理解
  • Spring Cloud Alibaba微服务治理实战:Nacos+Sentinel深度解析
  • 纳米软件矿用电源模块自动化测试方案分享
  • C++中std::allocator基本使用和注意事项
  • powerDesign 逆向 mysql 生成 物理模型,并用VBS脚本整理comment
  • 公司内部建立pypi源
  • 《Vue.js组件化开发实战:从安全纵深到性能跃迁》
  • leetcode刷题日记——三数之和
  • 李白打酒加强版本