python控制台进度条_Python小技巧之如何给控制台程序加进度条

各位朋友们,很久没有冒泡了。闲话休提,今天我给大家,一些python开发过程中一些小技巧,内容不多,但是是干货。

在平常爬虫开发中,或者处理特别复杂的任务的时候,程序需要一个处理时间,此时我们的程序就会卡在某个地方,一般我们的解决办法是这样:

然后等待程序执行完成

或者就是一个循环不停的打印

像这样:

有的时候数据太多,整个屏幕都满了。

所以在我们只想知道程序执行进度的时候,我们是时候需要一个进度条来显示了,

提高一下我们的姿势水平。

ok,以上都是凑字数的废话,接下来是干货的时候。我们要实现控制台下显示进度条,需要以下办法:

1、安装click

click是flask团队所开发,命令行神器,大家可以直接去看文档,我们这里只用到它的进度条,方便我们在需要的时候直接一个snipet拿过来就可以用。

安装:

pip install click

2、引入相关模块

我就用实际的例子来介绍吧。

比如我们要抓一张图片,假如图片有点大,我们想知道图片的下载进度

首先引用需要的模块

from click import progressbar #从click引入progressbar,就是我们需要的进度条

from io import BytesIO #这个可以理解为文件对象的ducktype,负责存抓下来的图片

import requests #这个负责爬虫抓取的,都懂

3、抓取图片

假设图片很大,我就直接随便拿百度图片一个链接来用了

url="https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1525346720537&di=8c176a2c81f7046f08e7dfd8424abcd4&imgtype=0&src=http%3A%2F%2Fstatic.open-open.com%2Flib%2FuploadImg%2F20160623%2F20160623173015_416.png"

resp = requests.get(url, stream=True,headers={"User-Agent":"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36"})

resp.raise_for_status()

4、获取要下载图片的大小:

total_size = int(resp.headers['content-length'])

data = BytesIO()#存图片

5、迭代获取图片

chunk_size=0.1#模拟一下抓取大文件,每次迭代获取0.1 byte

with progressbar(length=total_size) as pbar:

#进度条使用with方式,也就是实现python里的contex

for chunk in resp.iter_content(chunk_size=chunk_size):

data.write(chunk)

pbar.update(len(chunk))#每下载完一个chunk就会更新进度条一次

6、封装成完整的函数(snipet)

def download_with_progress(url, chunk_size, **progress_kwargs):

"""

Download streaming data from a URL, printing progress information to the

terminal.

Parameters

----------

url : str

A URL that can be understood by ``requests.get``.

chunk_size : int

Number of bytes to read at a time from requests.

**progress_kwargs

Forwarded to click.progressbar.

Returns

-------

data : BytesIO

A BytesIO containing the downloaded data.

"""

resp = requests.get(url, stream=True,headers={"User-Agent":"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36"})

resp.raise_for_status()

total_size = int(resp.headers['content-length'])

data = BytesIO()

with progressbar(length=total_size, **progress_kwargs) as pbar:

for chunk in resp.iter_content(chunk_size=chunk_size):

data.write(chunk)

pbar.update(len(chunk))

data.seek(0)

return data

if __name__=="__main__":

url="https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1525346720537&di=8c176a2c81f7046f08e7dfd8424abcd4&imgtype=0&src=http%3A%2F%2Fstatic.open-open.com%2Flib%2FuploadImg%2F20160623%2F20160623173015_416.png"

download_with_progress(url,1,label="fetch baidu python img")

7、运行效果如下:运行结果

打完收工。

最后啰嗦一句,大家可以关注我的微信公众号叫:什么的干货

或者搜索:smdgh88

我会在知乎和微信同步更新技术方面的干货,爬虫、python相关等等

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值