下载进度条
介绍
在下载东西需要可视化知道下载的情况
第一种
import requests
import time
import os
def download_video(url, save_path):
"""
从指定的URL下载视频文件,并将其保存到本地指定的路径。
:param url: 视频文件的URL
:param save_path: 视频文件保存的本地路径
"""
# 发送GET请求获取视频内容,设置stream=True以便流式处理响应数据
response = requests.get(url, stream=True)
# 获取视频文件的总大小(字节数),如果响应头中没有content-length字段,则默认为0
total_size = int(response.headers.get('content-length', 0))
# 设置每次读取的块大小为1024字节(1 KiB)
block_size = 1024
# 初始化已下载的字节数为0
downloaded_size = 0
# 获取保存路径的目录部分
save_folder = os.path.dirname(save_path)
# 如果目录不存在,则创建目录
if not os.path.exists(save_folder):
os.makedirs(save_folder)
# 以二进制写入模式打开文件
with open(save_path, 'wb') as file:
# 遍历响应内容的每一块数据
for data in response.iter_content(block_size):
# 更新已下载的字节数
downloaded_size += len(data)
# 将数据写入文件
file.write(data)
# 计算下载进度的百分比
progress = (downloaded_size / total_size) * 100
# 打印下载进度,保留两位小数
print(f"Download progress: {progress:.2f}%")
# 模拟下载速度,避免过快打印进度
time.sleep(0.1)
# 使用示例
if __name__ == "__main__":
video_url = "https://example.com/path/to/video.mp4"
save_path = "to/save/video.mp4"
download_video(video_url, save_path)
第二种
使用了tqdm
模块
tqdm
模块是一个用于在 Python 中创建进度条的库。它可以在命令行界面中为长时间运行的任务提供可视化的进度指示。以下是 tqdm 模块的一些主要参数解析:
iterable
: 这是进度条将迭代的可迭代对象。它可以是列表、元组、字典或任何其他可迭代的对象。
desc
: 这个参数用于设置进度条的描述信息。它将显示在进度条的左边。
total
: 这个参数用于设置进度条的总迭代次数。如果没有提供,tqdm
将尝试从可迭代对象的长度自动推断。
leave
: 这个参数决定进度条完成后是否保留。如果设置为 True
,进度条将保留在屏幕上;如果设置为 False
,进度条将在完成后消失。
ncols
: 这个参数用于设置进度条的宽度(以字符为单位)。如果没有提供,tqdm
将尝试自动推断终端的宽度。
unit
: 这个参数用于设置进度条的单位。例如,你可以设置为 “B” 表示字节,“KB” 表示千字节,“MB” 表示兆字节等。
unit_scale
: 这个参数用于设置单位的缩放。如果设置为 True
,tqdm
将自动根据进度条的大小调整单位。例如,如果进度条显示的数字很大,它可能会自动切换到兆字节或吉字节。
colour
: 这个参数用于设置进度条的颜色。你可以使用任何 ANSI 颜色代码来指定颜色。
ascii
: 这个参数用于设置进度条是否使用 ASCII 字符。如果设置为 True,进度条将使用 ASCII 字符来显示;如果设置为 False,它将使用更高级的字符集(如果终端支持的话)。
smoothing
: 这个参数用于设置进度条的平滑度。它的值应该在 0(完全不平滑)到 1(完全平滑)之间。
mininterval
: 这个参数用于设置进度条更新的最小时间间隔(以秒为单位)。如果进度条更新得太快,它可能会减慢脚本的执行速度。
maxinterval
: 这个参数用于设置进度条更新的最大时间间隔(以秒为单位)。如果进度条更新得太慢,它可能会看起来像是卡住了。
bar_format
: 这个参数用于自定义进度条的格式。你可以使用格式化字符串来指定进度条的各个部分,例如描述、进度百分比、已完成的数量和总数量等。
position
: 这个参数用于设置进度条在终端中的位置。如果没有提供,tqdm 将尝试自动推断。
dynamic_ncols
: 这个参数用于设置进度条是否动态调整宽度以适应终端的大小。如果设置为 True
,进度条将根据终端的宽度自动调整;如果设置为 False
,它将使用固定的宽度。
from tqdm import tqdm
import requests
import os
def download_video_with_tqdm(url, save_path):
"""
从指定的URL下载视频,并使用tqdm显示下载进度。
参数:
url (str): 视频的URL地址。
save_path (str): 视频保存的本地路径。
返回:
None
"""
# 发送GET请求,设置stream=True以便分块下载
response = requests.get(url, stream=True)
# 获取视频文件的总大小(字节),如果响应头中没有content-length字段,则默认为0
total_size = int(response.headers.get('content-length', 0))
# 每次读取的块大小为1024字节(1 KiB)
block_size = 1024
# 已下载的字节数,初始化为0
downloaded_size = 0
# 获取保存路径的目录部分
save_folder = os.path.dirname(save_path)
# 如果目录不存在,则创建目录
if not os.path.exists(save_folder):
os.makedirs(save_folder)
# 打开文件,以二进制写入模式
with open(save_path, 'wb') as file, tqdm(total=total_size, unit='iB', unit_scale=True) as pbar:
# 遍历响应内容的每一块数据
for data in response.iter_content(block_size):
# 更新已下载的字节数
downloaded_size += len(data)
# 将数据写入文件
file.write(data)
# 更新进度条
pbar.update(len(data))
# 使用示例
if __name__ == "__main__":
video_url = "https://example.com/path/to/video.mp4"
save_path = "path/to/save/video.mp4"
download_video_with_tqdm(video_url, save_path)
原文地址:https://blog.csdn.net/m0_46778548/article/details/145159797
免责声明:本站文章内容转载自网络资源,如侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!