Python 实现文件下载进度条与耗时统计

小林子
小林子
发布时间:2026-10-13 | 3人浏览过
原创

本文介绍如何使用 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 下载技巧,可搜索本站历史文章或继续阅读后续内容。感谢支持!

相关标签:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表