python打印进度条

前言:

今天学习python的常用模块的时候,了解到了time模块和datetime模块,于是想在编译环境中实时打印出时间,不会换行,且打印的时候自动删除前一步打印出的时间(本质原理不是这样),而不是像print那样打印之后自动换行再重新打印。

想要直接看到效果及方法,请直接跳到后文 解决办法

我们先来看看Print方法打印的效果:

代码:


  
  
  1. from datetime import datetime as dt
  2. import sys
  3. import time
  4. for i in range( 5):
  5. print(dt.now())
  6. time.sleep( 1)

输出结果:


  
  
  1. C:\Users\Administrator\PycharmProjects\untitled\venv\Scripts\python.exe C:/Users/Administrator/PycharmProjects/untitled/test.py
  2. 2018 -08 -06 16: 46: 46.636256
  3. 2018 -08 -06 16: 46: 47.636313
  4. 2018 -08 -06 16: 46: 48.636370
  5. 2018 -08 -06 16: 46: 49.636427
  6. 2018 -08 -06 16: 46: 50.637484
  7. Process finished with exit code 0

可以看到,用print打印出来自动换行且不会清除上一个结果

help一下看看:

help(print
  
  

输出:


  
  
  1. print(...)
  2. print(value, ..., sep= ' ', end= '\n', file=sys.stdout, flush= False)
  3. Prints the values to a stream, or to sys.stdout by default.
  4. Optional keyword arguments:
  5. file: a file-like object (stream); defaults to the current sys.stdout.
  6. sep: string inserted between values, default a space.
  7. end: string appended after the last value, default a newline.
  8. flush: whether to forcibly flush the stream.

可以看到end=“\n”表示了print自带换行

如果我想要在一行中打印一串信息,并且在下一次执行的时候删除这一行再重新打印(效果类似如此),该如何做呢?尝试清屏可不可以?

清屏试一试,查阅别的博客的方法有如下代码:


  
  
  1. import os
  2. os.system( 'cls')

但这是在命令行里使用的,用在编译器里不行。

解决办法

这时候就要用到sys.stdout.write了

使用如下方法:


  
  
  1. from datetime import datetime as dt
  2. import sys
  3. import time
  4. while True:
  5. a = dt.now()
  6. sys.stdout.write( "\r{0}".format(a))
  7. sys.stdout.flush()
  8. time.sleep( 1)

以及:


  
  
  1. from datetime import datetime as dt
  2. import sys
  3. import time
  4. for i in range( 20):
  5. a = dt.now()
  6. sys.stdout.write( "\r{0}".format(a))
  7. sys.stdout.flush()
  8. sys.stdout.write( '\033[4A')
  9. time.sleep( 1)

都可以实现实时打印。

其关键就在于使用'\r'这个转义字符(回到行首),  sys.stdout.write首先打印这一行后不带任何结尾(前文已经说过print打印结尾带end="\n",表示自带换行,换行了就不能在对已经打印的这一行进行更改编辑),使用了转移字符"\r"使得光标回到行首,再把缓冲区显示出来,就得到了我们所需要的效果。

效果输出:


  
  
  1. C:\Users\Administrator\PycharmProjects\untitled\venv\Scripts\python.exe C:/Users/Administrator/PycharmProjects/untitled/test.py
  2. 2018 -08 -06 18: 26: 21.264878

Run只会显示这一个,并且一秒钟更新一次。

这样就可以利用它来打印进度条。

进度条的特点:

     - 有标刻度显示所占总进度比例

     - 有百分比显示所占比例

代码示例:

import sys
import time
for i in range(31):
sys.stdout.write("\r")
sys.stdout.write("%s%% | %s" % (int(i/30100),int(i/30100)’))
sys.stdout.write(’\033[4A’)
sys.stdout.flush()
time.sleep(0.05)

输出效果:


  
  
  1. 40%******************************************

转载于: https://blog.csdn.net/qq_39161804/article/details/81456913#commentsedit

猜你喜欢

转载自blog.csdn.net/qq_26247503/article/details/84996949