返回顶部
首页 > 资讯 > 后端开发 > Python >python控制台中实现进度条功能
  • 916
分享到

python控制台中实现进度条功能

控制台进度条功能 2022-06-04 19:06:39 916人浏览 薄情痞子

Python 官方文档:入门教程 => 点击学习

摘要

我们大多数人都希望写一些简单的python脚本的同时都想能够在程序运行的过程中实现进度条的功能以便查看程序运行的速度或者进度。今天就和大家探讨这个问题:如何在Python控制台中实现进度条功 进度条最主要的

我们大多数人都希望写一些简单的python脚本的同时都想能够在程序运行的过程中实现进度条的功能以便查看程序运行的速度或者进度。今天就和大家探讨这个问题:如何在Python控制台中实现进度条功

进度条最主要的问题就是所有字符全部在同一行,而且可以修改。

然而当执行print语句的时候,python会在打印完这个语句的同时在结尾加上'n',也就是换行,这就导致在控制台下一旦被print之后就无法再修改了。所以我们现在的输出就不能再使用print来完成了。

我们要使用的是来自sys库的sys.stdout.write()函数,这个函数会在控制台输出这个字符串的同时不加上任何结尾,这就意味着这个输出还没有完全结束。通过sys.stdout.flush()函数可以把输出暂时打印在控制台中(造成print的假象,我们姑且先叫这个假输出)。那么如果我们使用'r'这个转义字符(回到行首),一切看起来是不是就合理很多了呢?

也就是说:打印字符串的时候,没有加上'n',同时让光标回到行首,再把当前缓冲区显示出来,也就好象是print了一样,但是这时候光标还在原来的位置。

举个例子:


import sys, time

for i in range(5):
 sys.stdout.write('{0}/5r'.fORMat(i + 1))
 sys.stdout.flush()
 time.sleep(1)

在终端下执行这段代码就会得到简单的进度条效果。

接下来还需要解决两个问题:

一:清空缓冲区

有些聪明的读者可能发现,当新的字符串比之前短的时候会出现问题,比如下面这段代码:


import sys, time

for i in range(5):
 sys.stdout.write(str(i) * (5 - i) + 'r')
 sys.stdout.flush()
 time.sleep(1)

运行后发现结果跟我们希望的不太一样。

其实是因为已经被flush出去的字符并不会主动清空,所以只有新写入的被修改了。针对这点我目前的解决方案是先输出一波空格把之前的字符串冲掉然后重新写:


import sys, time

for i in range(5):
 sys.stdout.write(' ' * 10 + 'r')
 sys.stdout.flush()
 sys.stdout.write(str(i) * (5 - i) + 'r')
 sys.stdout.flush()
 time.sleep(1)

二:固定底边输出

有时候我们希望在进度条加载的同时还有一些其他的输出。

我们不妨在刷新掉上一次输出之后输出所需输出的字符串,然后在假输出进度条。

采用如下代码:


import sys, time

for i in range(5):
 sys.stdout.write(' ' * 10 + 'r')
 sys.stdout.flush()
 print i
 sys.stdout.write(str(i) * (5 - i) + 'r')
 sys.stdout.flush()
 time.sleep(1)

就可以完成所需任务了。

怎么样,其实原理还是挺简单的吧?

这里给出一个自己实现的类用来打印进度条:


# -*- coding:utf-8 -*-

# Copyright: Lustralisk
# Author: Cedric Liu
# Date: 2015-11-08

import sys, time

class ProgressBar:
 def __init__(self, count = 0, total = 0, width = 50):
  self.count = count
  self.total = total
  self.width = width
 def move(self):
  self.count += 1
 def log(self, s):
  sys.stdout.write(' ' * (self.width + 9) + 'r')
  sys.stdout.flush()
  print s
  progress = self.width * self.count / self.total
  sys.stdout.write('{0:3}/{1:3}: '.format(self.count, self.total))
  sys.stdout.write('#' * progress + '-' * (self.width - progress) + 'r')
  if progress == self.width:
   sys.stdout.write('n')
  sys.stdout.flush()

bar = ProgressBar(total = 10)
for i in range(10):
 bar.move()
 bar.log('We have arrived at: ' + str(i + 1))
 time.sleep(1)

效果如下:

查看图片

这样就可以方便的在一些任务中查看程序运行的进度了,比如爬虫机器学习等并不知道要花多少时间等工作也都可以有形象的时间把握了。

以上就是在python控制台中实现进度条功能的方法,并给出了自己实现的类用来打印进度条,希望对大家的学习有所帮助。

--结束END--

本文标题: python控制台中实现进度条功能

本文链接: https://lsjlt.com/news/15661.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • python控制台中实现进度条功能
    我们大多数人都希望写一些简单的python脚本的同时都想能够在程序运行的过程中实现进度条的功能以便查看程序运行的速度或者进度。今天就和大家探讨这个问题:如何在python控制台中实现进度条功 进度条最主要的...
    99+
    2022-06-04
    控制台 进度条 功能
  • Python实现控制台进度条功能
    本文实例讲述了Python显示进度条的方法,是Python程序设计中非常实用的技巧。分享给大家供大家参考。具体方法如下: 首先,进度条和一般的print区别在哪里呢? 答案就是print会输出一个n,也就是...
    99+
    2022-06-04
    控制台 进度条 功能
  • js如何实现音频控制进度条功能
    这篇文章主要介绍js如何实现音频控制进度条功能,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!效果图:代码如下:<!doctype html> <html&...
    99+
    2024-04-02
  • C#进度条中怎么实现控制台显示
    这篇文章主要介绍“C#进度条中怎么实现控制台显示”,在日常操作中,相信很多人在C#进度条中怎么实现控制台显示问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”C#进度条中怎么实现控制台显示”的疑惑有所帮助!接下来...
    99+
    2023-06-17
  • python实现进度条
    import sysimport timedef view_bar(num, total):  rate = num / total  rate_num = int(rate * 100)  r = '\r[%s%s]%d%% ' % ("...
    99+
    2023-01-31
    进度条 python
  • JS怎么实现进度条顺滑功能
    本篇内容主要讲解“JS怎么实现进度条顺滑功能”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“JS怎么实现进度条顺滑功能”吧!进度条不顺滑相信大多前端同学都自己写过音频、视频播放器,实现并不复杂。最...
    99+
    2023-06-20
  • 易语言怎么实现进度条功能
    在易语言中,可以通过循环控制和延时操作来实现进度条功能。下面是一个简单的示例代码:```// 设置进度条的长度const Progr...
    99+
    2023-08-17
    易语言
  • node封装一个控制台进度条插件​​​​​​​详情
    目录前言插件效果功能实现控制台单行输出控制台输出多彩颜色进度条效果实现初始化配置更新进度条状态插件说明配置说明使用1、安装依赖2、在代码中引用3、完整示例代码前言 控制台的进度条大家...
    99+
    2022-11-13
    node封装控制台进度条插件​​​​​​​ node封装
  • iOS实现步骤进度条功能实例代码
    前言 在开发中,我们经常在很多场景下需要用到进度条,比如文件的下载,或者文件的上传等。 本文主要给大家介绍的是一个步骤进度条效果,步骤进度条效果参考 iOS UIKit 框架中并没...
    99+
    2022-05-25
    ios 进度条 步骤
  • vue Nprogress进度条功能实现常见问题
    NProgress是页面跳转是出现在浏览器顶部的进度条 官网:http://ricostacruz.com/nprogress/ github:https://github.com/...
    99+
    2024-04-02
  • Android实现进度条(ProgressBar)的功能与用法
    Android中的进度条ProgressBar用于显示一个任务的进度,可以通过设置最大值和当前值来表示进度的完成度。以下是Progr...
    99+
    2023-08-11
    Android
  • 如何在Python中使用Tqdm模块实现一个进度条功能
    本文章向大家介绍如何在Python中使用Tqdm模块实现一个进度条功能,主要包括如何在Python中使用Tqdm模块实现一个进度条功能的使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。Pytho...
    99+
    2023-06-06
  • python 实现终端中的进度条
    # -*- coding:utf-8 -*-   # Copyright: Lustralisk # Author: test # Date: 2015-11-08   import sys, time   class ProgressBa...
    99+
    2023-01-31
    终端 进度条 python
  • android进度条控件怎么实现
    Android进度条可以通过ProgressBar控件进行实现。以下是一种常用的实现方法:1. 在布局文件中添加ProgressBa...
    99+
    2023-08-30
    android
  • Android 实现自定义圆形进度条的功能
    Android 实现自定义圆形进度条:            &n...
    99+
    2022-06-06
    自定义 进度条 Android
  • vue项目实现文件下载进度条功能
    平时业务中下载文件方式常见的有俩种: 第一种,直接访问服务器的文件地址,自动下载文件; 第二种 ,服务器返回blob文件流,再对文件流进行处理和下载。 一般小文件适用于第一种下载方案...
    99+
    2024-04-02
  • 小程序怎么实现流程进度条功能
    今天小编给大家分享一下小程序怎么实现流程进度条功能的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。实现小程序流程进度条需求:没...
    99+
    2023-06-26
  • React和Node.js快速上传进度条功能实现
    目录正文技术栈实现过程1. 前端2. 后端服务(server.js)正文 在现代的Web应用程序中,文件上传是一个很常见的需求。上传进度条是一种用于告知用户上传进度的工具,它可以...
    99+
    2023-03-19
    React Node.js上传进度条 React Node.js
  • 使用Struts2如何实现一个进度条功能
    这篇文章将为大家详细讲解有关使用Struts2如何实现一个进度条功能,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。前台的页面效果图:前台进度条控件选择使用easyui 的progressba...
    99+
    2023-05-31
    struts 进度条
  • java进度条怎么实现实时监控
    实现实时监控的进度条可以使用Java的Swing库来实现。下面是一个简单的示例代码:```javaimport javax.swin...
    99+
    2023-09-01
    java
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作