自学内容网 自学内容网

下载进度条

下载进度条

介绍

在下载东西需要可视化知道下载的情况

第一种

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: 这个参数用于设置单位的缩放。如果设置为 Truetqdm 将自动根据进度条的大小调整单位。例如,如果进度条显示的数字很大,它可能会自动切换到兆字节或吉字节。

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)!