查看原文
其他

如何让python代码显示进度信息?

大邓 大邓和他的Python 2019-04-26

今天在知乎上看问题看到有人问如何展示程序进度,之前我在写爬虫好像都是自己使用print来显示进度,对于自己写的代码我还是很熟悉的,没啥问题。但是当我们把代码交给其他人使用,如果有进度条显示会更友好一些。tqdm是一个小巧、可扩展的进度条python库,在github的star数高达8K。

安装

在命令行中的安装命令 

pip install tqdm

在jupyter notebeook的Cell中的安装命令 

!pip install tqdm

一、使用

tqdm实现进度条效果有多重形式,最常用的就是下面给出的三种

1.1 基于可迭代对象

将可迭代对象放入 tqdm.tqdm函数中 , 可迭代对象长度为n,则进度条有n个进度。

from tqdm import tqdm
import time text = ""
for char in tqdm(["a", "b"]):    text = text + char    time.sleep(0.5)
100%|██████████| 2/2 [00:01<00:00,  1.99it/s]from tqdm import tqdm
for i in tqdm(range(4)):      pass    time.sleep(0.5)
100%|██████████| 4/4 [00:02<00:00,  1.98it/s]

trange(i)是tqdm(range(i))的简化版

from tqdm import trange
for i in trange(5):    pass    time.sleep(0.5)
100%|██████████| 5/5 [00:02<00:00,  1.99it/s]

我们可以将进度条先实例化,再放到for循环体中,这样就可以做一些操作

pbar = tqdm(['a', 'b', 'c', 'd', 'e'])

for char in pbar:    pbar.set_description("程序进度 {}".format(char))    time.sleep(0.5)
程序进度 e: 100%|██████████| 5/5 [00:02<00:00,  1.97it/s]

1.2 手动

from tqdm import tqdm
with tqdm(total=100) as pbar:    for i in range(10):        pbar.update(1)          time.sleep(0.5)
10%|█         | 10/100 [00:04<00:44,  2.04it/s]from tqdm import tqdm
with tqdm(total=100) as pbar:    for i in range(20):        pbar.update(1)          time.sleep(0.5)
20%|██        | 20/100 [00:09<00:40,  1.99it/s]from tqdm import tqdm
with tqdm(total=100) as pbar:    for i in range(20):        pbar.update(2)          time.sleep(0.5)
40%|████      | 40/100 [00:00<00:00, 129055.51it/s]

如果不适用with语句,我们记得在代码后close掉。

import time pbar = tqdm(total=100)
for i in range(10):    pbar.update(1)    time.sleep(0.1)
pbar.close()
10%|█         | 10/100 [00:00<00:08, 10.03it/s]

tqdm常见参数

我们看看tqdm类的各个参数及其作用。

class tqdm(object):  def __init__(self, iterable=None, desc=None, total=None):
  • iterable: 待修饰的可迭代对象,上面所有的tqdm使用例子实际上都是iterable参数起作用。默认接受第一个参数

  • desc: 进度条里加入前缀

  • total: 进度条长度,比如total=100,进度条完整的要更新一百次。

import time pbar = tqdm(total=100)
for i in range(10):    pbar.update(1)    time.sleep(0.1)
pbar.close()
10%|█         | 10/100 [00:00<00:09,  9.92it/s]import time pbar = tqdm(total=100, desc='大邓')
for i in range(10):    pbar.update(1)    time.sleep(0.1)
pbar.close()
大邓:  10%|█         | 10/100 [00:00<00:09,  9.93it/s]

精选文章

为什么你要为2020,而不是2019做计划?

余额宝百万体验金等你来领

我是如何通过python挣外快的 

PySimpleGUI: 开发自己第一个软件 

自然语言处理之LDA主题模型    

100G 文本分析语料资源(免费下载)      

15个最好的数据科学领域Python库    

使用Pandas更好的做数据科学

抓取8w技能交换公告信息

【视频讲解】Scrapy递归抓取简书用户信息     

大邓强力推荐-jupyter notebook使用小技巧       

数据清洗 常用正则表达式大全

Python 3.7中dataclass的终极指南(一) 

Python 3.7中dataclass的终极指南(二) 

[计算消费者的偏好]推荐系统与协同过滤、奇异值分解

机器学习: 识别图片中的数字

应用PCA降维加速模型训练

如何从文本中提取特征信息?

文本数据标注工具-YEDDA

使用sklearn做自然语言处理-1 

使用sklearn做自然语言处理-2

Python圈中的符号计算库-Sympy

Python中处理日期时间库的使用方法 


    您可能也对以下帖子感兴趣

    文章有问题?点此查看未经处理的缓存