python下载进度条
时间: 2023-11-04 09:58:24 浏览: 139
引用中提供了一个用于显示Python文件下载进度条的工具方法。这个方法通过使用requests库来下载文件,并实时计算下载进度并显示进度条。你可以按照下面的步骤使用这个方法:
1. 导入必要的库:
```
import requests
import time
```
2. 定义一个函数,命名为`save_file`,该函数接受两个参数:文件的URL和保存的文件名。
3. 在函数内部,使用`requests.get`来获取文件的响应对象。设置`stream=True`以启用流式下载。
4. 获取文件的总字节数,通过读取响应对象的`content-length`头部信息来获取。转换为整数并存储在`content_size`变量中。
5. 使用`with open`语句打开要保存的文件,使用`wb`模式来写入二进制数据。
6. 循环遍历通过`res.iter_content(chunk_size=chunk_size)`获取的数据块,将数据块写入文件中,并计算已下载文件的大小。
7. 在循环中,使用已下载文件的大小和总文件大小来计算下载进度百分比,并根据进度百分比显示进度条。
8. 下载完成后,计算并显示下载所花费的时间。
下面是一个例子,展示了如何使用上述方法来下载文件并显示进度条:
```python
import requests
import time
def save_file(url, filename):
start = time.time()
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.159 Safari/537.36"
}
res = requests.get(url, headers=headers, stream=True)
chunk_size = 1024
content_size = int(res.headers["content-length"])
if res.status_code == 200:
print("[文件地址]:", url)
print('[文件名称]:', filename)
print('[文件大小]: {:.3f} MB'.format(content_size / chunk_size / 1024))
with open(f"{filename}", 'wb') as f:
for data in res.iter_content(chunk_size=chunk_size):
f.write(data)
size = len(data)
print('\r[下载进度]: {} {:.2f}%'.format('>' * int(size * 50 / content_size), float(size / content_size * 100)), end='')
end = time.time()
print("\n[下载时间]: {:.2f}s".format(end - start))
print("".center(100, "*"))
# 使用示例
url = "https://example.com/file.zip"
filename = "file.zip"
save_file(url, filename)
```
阅读全文