大家在下载东西的时候都会显示下载进度,今天,我们就来模仿下如何显示出
如下的进度条
参考博客园: https://my.oschina.net/jhao104/blog/681507
参考脚本之家: http://www.jb51.net/article/55413.htm
-----------------------------------------------------------------------------------------
1. 先来种简单一点的。没有图案的只有百分比的
1 # coding: utf-8 2 # 这里推荐第一种用法 3 4 import os, sys, time 5 6 def pro_bar1(): 7 i = 2 8 for j in range(1, 51): 9 print u"\r已加载: %s%%" % i, # 百分号在格式化字符后面写成%%的形式 10 time.sleep(0.1) # 设置时间为0.1s 11 i += 2 12 # print "...", 结尾加逗号虽然也不会自动换行,但它的光标却会默认换行(猜测) 13 14 def pro_bar2(): 15 i = 2 16 for j in range(1, 51): 17 sys.stdout.write(u"\r已加载: %s%%" % i) 18 time.sleep(0.1) 19 i += 2 20 # sys.stdout.write()不会自动换行, 所以我们在循环结束后给它换行 21 print 22 23 def pro_bar3(): 24 i = 2 25 for j in range(1, 51): 26 print u"已加载: %s%%" % i 27 time.sleep(0.1) 28 if i < 100: 29 os.system("cls") 30 i += 2 31 32 pro_bar1() 33 # pro_bar2() 34 # pro_bar3()
\r相当于回车键,光标移动到当前行的首位而不换行
\n:将光标移动到下一行,并不移动到首位;
2. 这种也不难,就是在更新百分比的同时更新#表示进度
# coding: utf-8 import sys, time j = 2 k = "#" for i in range(1, 51): print u"\r已加载: %s%% ||%s>>" % (j, k), time.sleep(0.1) j += 2 k += "#"
上面的print " ... ", 还可以写成这种形式的
sys.stdout.write(r"\r已加载: %s%% —||%s>>" % (j, k))
3. 最后一类型是这样子滴。由于是分多行输出的,所以暂时用不了更新的,这回我们用清屏。
# coding: utf-8 import os, time def pro_bar(): # progress bar: 进度条 sharp = "*" # hash和sharp均可以代表#号 per = 2 # percentage: 百分比 for i in range(1, 51): print u"------------------- 已加载: %s%% -----------------" % per print " 1 2 3 4 5 6 7 8 9 0" print "----0----0----0----0----0----0----0----0----0----0" print sharp per += 2 sharp += "*" time.sleep(0.1) if i < 50: os.system("cls") pro_bar()
上面几种方案的共同问题就是,当井号的数量超过一行时,就会出现这种问题。所以上面我们以%2, %4,
%6这样的方式进行迭代。所以一共也就50个#。