Python实现终端下的进度条

本篇文章介绍在Python下实现进度条的几种方法

Python Version: 3.5+

第一种:简单的字符拼接

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
import sys
import time
import os

# 获取终端的宽度
w = os.get_terminal_size().columns
# -5个字符是为了为后面'>100%'留地方
# 所以'-'所占用的最大宽度为总终端宽度-5
# 然后计算出每增长1%需要增长几个'-'字符
item = (w - 5) / 100


def view_bar(num, total):
# 计算出进度百分比
rate = num / total
rate_num = int(rate * 100)
# int(rate_num*item) 根据当前进度计算出需要多少个'-'字符(取整数)字符串中的\r是必须存在的
r1 = '\r%s>%d%%' %("-" * int(rate_num*item), rate_num)
# 在终端中输出(不换行)
sys.stdout.write(r1)
sys.stdout.flush()


for i in range(1, 101):
time.sleep(0.1)
view_bar(i, 100)

这里特别说明下,上面的代码中,获取终端宽度的方法os.get_terminal_size().columns是Python3+版本中的新功能,如果是2+的Python,可以通过以下方式获取终端宽度

1
2
3
import curses
screen = curses.initscr()
height, width = screen.getmaxyx()

第二种:使用第三方模块

感受下~ 是不是瞬间不想重复造轮子了

progressive

progressbar