Python实现实时显示进度条的六种方法
在Python中,实时显示进度条是非常常见的需求,有了进度条以后,可以非常清楚的了解程序的执行进度,以及剩余的时间。在本文中,将详细介绍Python实现实时显示进度条的六种方法。
方法一:使用tqdm模块
tqdm模块是一个非常强大的进度条模块,它可以实现多种进度条效果,并且非常易用。下面是一个使用tqdm模块实现进度条的示例:
from tqdm import tqdm
import time
for i in tqdm(range(100)):
time.sleep(0.1)
在该示例中,使用了tqdm模块,tqdm(range(100))
会生成一个长度为100的迭代器,每次循环会自动更新进度条。
方法二:使用progressbar模块
progressbar模块是另一个常用的进度条模块,它功能相对简单,但是也非常实用。下面是一个使用progressbar模块实现进度条的示例:
import progressbar
import time
bar = progressbar.ProgressBar(maxval=100, widgets=[progressbar.Bar('=', '[', ']'), ' ', progressbar.Percentage()])
bar.start()
for i in range(100):
time.sleep(0.1)
bar.update(i+1)
bar.finish()
在该示例中,使用了progressbar模块,progressbar.ProgressBar(maxval=100, widgets=[progressbar.Bar('=', '[', ']'), ' ', progressbar.Percentage()])
用于创建一个ProgressBar对象,bar.start()
用于启动进度条,bar.update(i+1)
用于更新进度条。
方法三:使用手动打印的方式
手动打印的方式非常简单,只需要在循环中,手动计算进度,并打印出来即可。下面是一个使用手动打印方式实现进度条的示例:
import time
for i in range(100):
progress = int((i+1)/100*50)
bar = '['+'='*progress+'>'+'.'*(50-progress-1)+']'
print('\r'+bar+'{0:.2f}%'.format((i+1)), end='')
time.sleep(0.1)
在该示例中,使用了手动打印的方式,progress = int((i+1)/100*50)
用于计算进度,bar = '['+'='*progress+'>'+'.'*(50-progress-1)+']'
用于生成进度条,print('\r'+bar+'{0:.2f}%'.format((i+1)), end='')
用于实时打印进度条。
方法四:使用curses库
curses库是一个非常常用的终端图形库,可以用来创建各种命令行工具,其中也包括了进度条。下面是一个使用curses库实现进度条的示例:
import curses
import time
stdscr = curses.initscr()
curses.noecho()
stdscr.addstr(0, 0, 'Progress : 0%')
for i in range(100):
stdscr.addstr(0, 11, str(i+1)+'%')
stdscr.addstr(1, 0, '['+'='*(i//2)+'>'+'.'*(49-i//2)+']')
stdscr.refresh()
time.sleep(0.1)
curses.endwin()
在该示例中,使用了curses库,stdscr.addstr(0, 0, 'Progress : 0%')
用于打印进度条的初始状态,stdscr.addstr(0, 11, str(i+1)+'%')
用于实时更新进度,stdscr.addstr(1, 0, '['+'='*(i//2)+'>'+'.'*(49-i//2)+']')
用于生成进度条。
方法五:使用pyspin模块
pyspin模块是一个非常小巧的进度条模块,除了进度条之外,没有其他功能。下面是一个使用pyspin模块实现进度条的示例:
from pyspin.spin import make_spin, Default
import time
@make_spin(Default, "Processing...")
def task():
time.sleep(10)
task()
在该示例中,使用了pyspin模块,@make_spin(Default, "Processing...")
用于生成进度条,task()
用于执行任务。
方法六:使用clint模块
clint模块是一个功能更加丰富的终端工具库,其中也包括进度条功能。下面是一个使用clint模块实现进度条的示例:
from clint.textui import progress
import requests
response = requests.get('http://speedtest.ftp.otenet.gr/files/test10Mb.db', stream=True)
with open('test.db', 'wb') as f:
for chunk in progress.bar(response.iter_content(chunk_size=1024), expected_size=(1024*100)//1024 + 1):
if chunk:
f.write(chunk)
f.flush()
在该示例中,使用了clint模块,progress.bar(response.iter_content(chunk_size=1024), expected_size=(1024*100)//1024 + 1)
用于生成进度条,if chunk:
用于判断是否有数据块。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python实现实时显示进度条的六种方法 - Python技术站