转载 做个进度条

from

https://blog.csdn.net/mrr1ght/article/details/80803816

一 sys.stdout的形式就是print的一种默认输出格式,等于print "%VALUE%"

 print函数是对sys.stdout的高级封装,看下print函数的解释

   
   
  1. # Prints the values to a stream, or to sys.stdout by default.
  2. # Optional keyword arguments:
  3. # file: a file-like object (stream); defaults to the current sys.stdout.
  4. # sep: string inserted between values, default a space.
  5. # end: string appended after the last value, default a newline.

print是默认调用了sys.stdout.write()方法将输出打印到控制台

print 也可通过file参数将输出打印到其他文件中


   
   
  1. f = open( 'test.txt', 'a')
  2. print( 'this is a test',file=f)

二 sys.stdout.write()输出不会自动换行,没有end,可用转义字符自行控制

     /n 换行

     /r  回车到本行首,可刷新输出

 如用sys.stdout.write() 和\r实现自定义进度条


   
   
  1. # -*- coding: utf-8 -*-
  2. from tqdm import tqdm
  3. import time
  4. import sys
  5. for i in tqdm(range(100)):
  6. time.sleep(.1)
  7. for i in range(100):
  8. a = (i+1)/5
  9. b = 20-a
  10. #sys.stdout.write('\r>>convert image %d/%d'%(i,b))
  11. sys.stdout.write('\r|%s%s|%d%%'%(a*'▇',b*' ',i+1))
  12. sys.stdout.flush()
  13. time.sleep(.1)

运行结果如下图:



sys.stdout.flush()强制刷新缓冲区,


   
   
  1. 缓冲区的刷新方式:
  2. 1.flush()刷新缓存区
  3. 2.缓冲区满时,自动刷新
  4. 3.文件关闭或者是程序结束自动刷新。

当我们需要打印一些字符时,并不是立刻就打印,而是先将需要打印的字符放入缓冲区,在缓冲区刷新时打印,当缓冲区未满,或者程序运行未结束时,可使用sys.stdout.flush()强制刷新缓冲区,立刻进行打印;

附:写出漂亮的进度条模块tqdm


   
   
  1. from tqdm import tqdm
  2. import time
  3. for i in tqdm(range( 10000)):
  4. time.sleep( 0.01)

运行结果如下:


猜你喜欢

转载自blog.csdn.net/weixin_43970884/article/details/89497043
今日推荐