Как заставить индикатор выполнения TQDM автоматически обновляться между КБ и МБ - PullRequest
0 голосов
/ 13 апреля 2020

У меня есть простая tqdm панель, интегрированная с модулем requests для загрузки файлов, код:

import requests
from tqdm import tqdm

def download_to_file(path: str, filename: str, url: str):
    try:
        r = requests.get(url, stream=True)
        file_length = int(r.headers['Content-Length'])
        chunk_size = 1024  # 1MB
        num_bars = int(file_length / chunk_size)

        if r.status_code == 200:
            with open(f'{path}\\{filename}', 'wb+') as f:
                pbar = tqdm(total=num_bars, unit='B', unit_scale=True, desc=filename, leave=False, file=sys.stdout,
                            unit_divisor=1024)
                for chunk in r.iter_content(chunk_size=chunk_size):
                    if chunk:
                        pbar.update()
                        f.write(chunk)
        else:
            raise requests.HTTPError(f'Status code is {r.status_code}')
    except Exception as ex:
        print(f'[-] Failed to download \'{filename}\'! {str(ex)}')
        pass

Работает, но это индикатор выполнения file.extension: 100%|████████████▉| 123k/123k [00:58<00:00, 2.87kB/s], проблема в файле 123MB отображается как 123k, а текущая скорость - в КБ / с, я попытался вместо этого изменить единицу измерения на КБ, но затем она просто делает скорость go до 2,87 кБ / с, что должно быть МБ / с. Я попытался просмотреть репозитории GitHub, которые, как мне известно, используют tqdm, но не смог найти пример того, что я хочу сделать, как мне сделать так, чтобы он показывал 123 МБ в общем размере и скорость начала в КБ / с, но затем изменился на МБ / с, когда он превышает 1000?

...