163
社区成员




本实验将使用Python3 实现命令行中的动态进度条,并且能被其它程序调用,为程序执行任务的进度提供直观的展示。
pycharm
1、新建一个文件progressbar.py。为了让代码具有通用性,编写一个类ShowProcess。
# -*- coding: UTF-8 -*-
import sys
import time
'''
显示处理进度的类
调用该类相关函数即可实现处理进度的显示
'''
class ShowProcess():
….
2、定义一个全局变量,即进度条的长度。此时定义50个字符的长度,用max_arrow表示。还要记录进度条当前是第几个,用i表示。
# 进度条长度
max_arrow = 50
i = 0
# 定义构造函数。这些参数根据场景的不同参数值也不同。
# 初始化函数
def __init__(self, max_steps=100, bar_char = '#', info_done = 'Done'):
self.max_steps = max_steps
self.bar_char = bar_char
self.info_done = info_done
3、max_steps表示一共有多少个任务。比如要下载2000幅图片,max_steps为2000。bar_char表示进度条用什么符号表示。#相对好看一些。info_done表示进度条到了100%后,输出什么信息。比如说出OK或者Done或者下载完成。
# 显示函数,根据当前的处理进度i显示进度
# 效果为[##################################################] 100.00%
def show_process(self, message = ''):
self.i += 1
num_arrow = int(self.i * self.max_arrow / self.max_steps) #计算显示多少个符号
num_line = self.max_arrow - num_arrow #计算显示多少个'-'
percent = self.i * 100.0 / self.max_steps #计算完成进度,格式为xx.xx%
process_bar = '[' + self.bar_char * num_arrow + '-' * num_line + ']'\
+ ' %.2f' % percent + '% ' + message + '\r' #带输出的字符串,'\r'表示不换行回到最左边
sys.stdout.write(process_bar) #这两句打印字符到终端
sys.stdout.flush()
if self.i >= self.max_steps:
self.close()
def close(self):
print('')
print(self.info_done)
self.i = 0
4、show_process方法中的message意思是进度条执行的过程中在右边显示什么信息。最后是调用。
if __name__=='__main__':
max_steps = 150
process_bar = ShowProcess(max_steps, '#', 'OK')
for i in range(max_steps):
message = 'downloading image_%d.jpg...' %(i+1)
process_bar.show_process(message)
time.sleep(0.5)
5、本实验的完整代码如下:
# -*- coding: UTF-8 -*-
import sys
import time
'''
显示处理进度的类
调用该类相关函数即可实现处理进度的显示
'''
class ShowProcess():
# 进度条长度
max_arrow = 50
i = 0
# 初始化函数
def __init__(self, max_steps=100, bar_char = '#', info_done = 'Done'):
self.max_steps = max_steps
self.bar_char = bar_char
self.info_done = info_done
# 显示函数,根据当前的处理进度i显示进度
# 效果为[##################################################] 100.00%
def show_process(self, message = ''):
self.i += 1
num_arrow = int(self.i * self.max_arrow / self.max_steps) #计算显示多少个符号
num_line = self.max_arrow - num_arrow #计算显示多少个'-'
percent = self.i * 100.0 / self.max_steps #计算完成进度,格式为xx.xx%
process_bar = '[' + self.bar_char * num_arrow + '-' * num_line + ']'\
+ ' %.2f' % percent + '% ' + message + '\r' #带输出的字符串,'\r'表示不换行回到最左边
sys.stdout.write(process_bar) #这两句打印字符到终端
sys.stdout.flush()
if self.i >= self.max_steps:
self.close()
def close(self):
print('')
print(self.info_done)
self.i = 0
if __name__=='__main__':
max_steps = 150
process_bar = ShowProcess(max_steps, '#', 'OK')
for i in range(max_steps):
message = 'downloading image_%d.jpg...' %(i+1)
process_bar.show_process(message)
time.sleep(0.5)
6、实验结果
本次实验中,首先为了让代码具有通用性,编写一个类,叫ShowProcess,接下来定义一个全局变量进度条的长度,定义了50个字符的长度,用max_arrow表示,并记录进度条当前是第几个,用i表示,最后是调用。