先直接上代码:fromcontextlibimportclosingimportrequests,osdefdownload_video(download_url,download_path):video_name=os.path.basename(download_path)withclosing(requests.get(download_url,timeout=10,verify=False,stream=True))asresponse:chunk_size=1024# 单次请求最大值content_size=int(response.headers['content-length'])# 文件总大小data_count=0# 当前已传输的大小withopen(download_path,"wb")asfile:fordatainresponse.iter_content(chunk_size=chunk_size):file.write(data)done_block=int((data_count/content_size)*50)# 已经下载的文件大小data_count=data_count+len(data)# 实时进度条进度now_jd=(data_count/content_size)*100# %% 表示%print("\r %s [%s%s] %d%% "%(video_name+"----",done_block*'█',' '*(50-1-done_block),now_jd),end=" ")if__name__=='__main__':url="视频地址"video_path="测试.mp4"download_video(url,video_path)解释下:1.with closing我们在日常读取文件资源时,经常会用到with open() as f:的句子。但是使用with语句的时候是需要条件的,任何对象,只要正确实现了上下文管理,就可以使用with语句,实现上下文管理是通过__enter__和__exit__这两个方法实现的。2.文件流stream文件流,它就好比你一边抽一边取,不用等池子满了再用,所以对于一些大型文件(几个G的视频)一般会用到这个参数。(对小型文件也可以使用)3.response.headers[‘content-length’]这表示获取文件的总大小,但是它得到的结果的数据类型是str而不是int,因此需要进行数据类型转换。4.response.iter_content()该方法一般用于从网上下载文件和网页(需要用到requests.get(url))其中chunk_size表示单次请求最大值。5.\r和%\r表示回车(回到行首)%是一种占位符而对于%%,第一个%起到了转义的作用,使结果输出为百分号%效果如下:
阅读完成 · 觉得有帮助?