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

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

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

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

一个例子

[经测试,在Linux终端中执行才有效果,pycharm中调试输出没有效果]

import sys, time

for i in range(5):

sys.stdout.write('HELLO: %05d' % i)

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)

就可以完成所需任务了。

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

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

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实现控制台中的进度条功能代码就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们。

本文标题: Python实现控制台中的进度条功能代码

本文地址: http://www.cppcns.com/jiaoben/python/215555.html

python进度条代码怎么写_Python实现控制台中的进度条功能代码相关推荐

  1. python里进度条编程_Python实现控制台中的进度条

    相信很多人在写一些简单的Python脚本的时候都希望能够在程序运行的过程中实现进度条的功能以便查看程序运行的速度或者进度. 我之前一直想实现这样一个东西,也查看了许多博客但是都找不到一个完美的解决方案 ...

  2. python测试代码怎么写_Python 单元测试

    Test your software, or your users will. "Test ruthlessly. Don't make your users find bugs for y ...

  3. python代码代写_python代写代码

    广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! 1 原则在开始讨论python社区所采用的具体标准或是由其他人推荐的建议之前,考 ...

  4. python中空格键怎么写_python的空格键

    广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! 我使用pyqt 5和python 3创建了工作ui,除了单击按钮外,还想通过按键 ...

  5. python从第二行开始写_Python第2课 - 第一个Python程序

    在本节课中,你将运行自己的第一个程序 -- hello_world.py.在这之前,需要熟悉两个概念:命令行模式和Python交互模式.同时掌握输入和输出. 1. 命令行模式和Python交互模式 1 ...

  6. python爬取千图网_python爬取lol官网英雄图片代码

    python爬取lol官网英雄图片代码可以帮助用户对英雄联盟官网平台的皮肤图片进行抓取,有很多喜欢lol的玩家们想要官方的英雄图片当作自己的背景或者头像,可以使用这款软件为你爬取图片资源,操作很简单, ...

  7. python刷题软件代码_Python使用docx模块实现刷题功能代码

    起由: 前一阵子想要刷一刷国二Python的题库,千方百计找到题库之后,打开一个个word文档,发现一题一题阅读很麻烦,而且答案就在题目的下面,阅读题目的时候想自己做出题目却又总能不经意看到答案,甚烦 ...

  8. python 装饰器实现事件绑定_Python装饰器实现几类验证功能做法实例

    最近新需求来了,要给系统增加几个资源权限.尽量减少代码的改动和程序的复杂程度.所以还是使用装饰器比较科学 之前用了一些登录验证的现成装饰器模块.然后仿写一些用户管理部分的权限装饰器. 比如下面这种 调 ...

  9. android 强制锁屏代码,Android 监听锁屏、解锁、开屏 功能代码

    1.首先定义 ScreenListener package com.app.lib; import android.content.BroadcastReceiver; import android. ...

  10. python中莱布尼茨计算圆周率_python圆周率盘算(带进度条)

    一.要求: 1.盘算到圆周率后面越多位越好. 2.用进度条显示盘算的进度. 3.要求给出圆周率Π的详细盘算方法和注释. 二.算法: 1.拉马努金公式: 2.高斯-勒让德公式: 设置初始值: 频频执行以 ...

最新文章

  1. 3星|《终身成长》:成长型思维让人进步,固定型思维让人固步自封。有新意的励志书,但有锤子模式的嫌疑。...
  2. python在函数内部有没有办法定义全局变量_修改函数内部的全局变量
  3. asp.net学习笔记·将数据库中的数据保存在EXCEL文件中
  4. 聊一聊Python的变量类型判断type和isinstance
  5. 第18课:项目实战——利用 PyTorch 构建 RNN 模型
  6. Winform下的Combox根据值来选中项
  7. lock_sga and pre_page_sga设置
  8. Cocos Studio 2.3.2不再支持直接导入PSD文件
  9. 微信小程序内链微信公众号的方法
  10. 惠普应用监控解决方案
  11. [面试] 算法(八)—— 树
  12. 磁盘调度算法课程设计(附源代码)
  13. 猜数字游戏python程序_【自学编程】python 小游戏—猜数字
  14. My SQL中show命令--MySQL中帮助查看
  15. . mindoc linux amd64,linux安装Mindoc文档管理系统
  16. iOS UITextView字数限制 拼音
  17. Java 生成舒尔特方格
  18. 华为mate50pro和华为mate50RS的区别
  19. 机器学习之K均值(K-Means)算法
  20. 设计一个学生学籍管理系统

热门文章

  1. 汇编心得(一)在32位机上实现64位数的相加
  2. (转)oop设计模式简介
  3. 大连市2011年初中毕业升学考试试测(一)数 学
  4. 民营企业实施ERP 须先上规范化补习班
  5. 「代码随想录」474.一和零【动态规划】力扣详解!
  6. 2014 找工作总结
  7. 如何在 Mac 上使用悬停文本?
  8. 如何在 Mac 上的“音乐”应用和 iTunes 中创建 Genius 播放列表?
  9. 如何使用 Siri 拨打电话并使用电话功能?
  10. 循环语句—C#基础回顾