Python 实现文件下载进度条与耗时统计
本文介绍如何使用 Python 的 requests 库实现文件下载时的实时进度条显示与耗时统计。通过设置 stream=True 并分块读取数据,结合 os 和 time 模块,可直观展示下载百分比及所用时间,适用于各类文件下载场景。
Python 文件下载进度条与耗时统计实现
在文件下载过程中,实时显示进度条和预计或实际耗时能显著提升用户体验。实现这一功能的方法并不复杂,本文提供了一个包含进度条模块及运行时间统计功能的示例代码。
该功能模块主要依赖以下三个 Python 标准库或第三方库:
1. os(用于文件路径操作) 2. requests(用于网络请求) 3. time(用于时间统计)
接下来直接展示核心代码实现。
核心代码与实现原理
# 进度条模块
def progressbar(url,path):
if not os.path.exists(path): # 看是否有该文件夹,没有则创建文件夹
os.mkdir(path)
start = time.time() #下载开始时间
response = requests.get(url, stream=True) #stream=True必须写上
size = 0 #初始化已下载大小
chunk_size = 1024 # 每次下载的数据大小
content_size = int(response.headers['content-length']) # 下载文件总大小
try:
if response.status_code == 200: #判断是否响应成功
print('Start download,[File size]:{size:.2f} MB'.format(size = content_size / chunk_size /1024)) #开始下载,显示下载文件大小
filepath = path+'\name.extension name' #设置图片name,注:必须加上扩展名
with open(filepath,'wb') as file: #显示进度条
for data in response.iter_content(chunk_size = chunk_size):
file.write(data)
size +=len(data)
print('\r'+'[下载进度]:%s%.2f%%' % ('>'*int(size*50/ content_size), float(size / content_size * 100)) ,end=' ')
end = time.time() #下载结束时间
print('Download completed!,times: %.2f秒' % (end - start)) #输出下载用时时间
except:
其实现原理较为直观:通常使用requests.get(url).content获取的是二进制文件数据。通过 for 循环每次读取固定大小(如 1024KB)的数据块,并在循环结束后获取文件的总大小,即可计算出已下载比例,从而完成进度条功能的实现。
上述函数实现了基本的进度条显示与时间计算功能。为了验证效果,我们可以尝试下载一张皮卡丘的图片进行测试,该函数接收两个参数:目标 URL 和保存路径。


运行效果良好。需要注意的是,[下载进度] 后面的 ‘>' 符号是动态刷新的,在静态截图中可能无法完全体现其动态效果,建议在本地环境中实际运行测试。
以下是完整的实例代码:
import os
import requests
import time
# 进度条模块
def progressbar(url,path):
if not os.path.exists(path): # 看是否有该文件夹,没有则创建文件夹
os.mkdir(path)
start = time.time() #下载开始时间
response = requests.get(url, stream=True)
size = 0 #初始化已下载大小
chunk_size = 1024 # 每次下载的数据大小
content_size = int(response.headers['content-length']) # 下载文件总大小
try:
if response.status_code == 200: #判断是否响应成功
print('Start download,[File size]:{size:.2f} MB'.format(size = content_size / chunk_size /1024)) #开始下载,显示下载文件大小
filepath = path+'\Pikachu.jpg' #设置图片name,注:必须加上扩展名
with open(filepath,'wb') as file: #显示进度条
for data in response.iter_content(chunk_size = chunk_size):
file.write(data)
size +=len(data)
print('\r'+'[下载进度]:%s%.2f%%' % ('>'*int(size*50/ content_size), float(size / content_size * 100)) ,end=' ')
end = time.time() #下载结束时间
print('Download completed!,times: %.2f秒' % (end - start)) #输出下载用时时间
except:
print('Error!')
def main():
#下载皮卡丘图片
url = 'https://img.moegirl.org/common/thumb/e/ed/%E7%9A%AE%E5%8D%A1%E4%B8%98%E4%B9%8B%E6%AD%8C.jpg/1200px-%E7%9A%AE%E5%8D%A1%E4%B8%98%E4%B9%8B%E6%AD%8C.jpg'
path = r'E:\123' # 设置下载到本地的地址
progressbar(url,path)
if __name__ == '__main__':
main()
总结
至此,关于如何在 Python 中为文件下载添加进度条和显示下载时间的介绍已完成。如需了解更多相关 Python 下载技巧,可搜索本站历史文章或继续阅读后续内容。感谢支持!
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













