Добавление пользовательских сообщений в tqdm progressbar Python

Пройдите тест, узнайте какой профессии подходите
Я предпочитаю
0%
Работать самостоятельно и не зависеть от других
Работать в команде и рассчитывать на помощь коллег
Организовывать и контролировать процесс работы

Быстрый ответ

Да, с помощью tqdm вы можете настроить индикаторы прогресса и добавить к ним сообщения, используя метод set_postfix. Этот метод позволяет отображать дополнительную информацию после индикатора, улучшая отчеты о выполнении задач:

Python
Скопировать код
from tqdm import tqdm
for i in tqdm(range(10), desc="Процесс который мы отслеживаем"):
    tqdm.write(f"Прогресс: {i+1}. Процесс кодирования данных идет полным ходом!")

Здесь код генерирует сообщение, которое обновляется после каждого шага итерации.

Пошаговый план для смены профессии

Отображение динамических сообщений

Одной из удобных функций tqdm является отображение сообщений в реальном времени с использованием метода set_description(). Вот как можно настроить индикатор прогресса для отображения сообщений 🚀:

Python
Скопировать код
from tqdm import trange
import time

t = trange(100, desc='Выполнение...', leave=True)
for i in t:
    t.set_description(f"Процесс завершен на {i}%. ")
    t.refresh()
    time.sleep(0.1)

Важным аспектом здесь является мгновенное обновление сообщения, что позволяет отслеживать актуальное состояние работы без лишних уведомлений.

Чистота кода при использовании индикатора прогресса: оператор 'with'

При использовании оператора with в комбинации с tqdm, ваш код остается чистым и понятным даже при обработке областей видимости:

Python
Скопировать код
from tqdm import tqdm
import time

with tqdm(total=100, desc="Обработка...") as pbar:
    for i in range(10):
        pbar.set_description(f"Этап {i+1} из 10")
        pbar.update(10)
        time.sleep(0.1)

Совет: Внутри блока with обязательно обновляйте прогресс, как показано здесь – с помощью update(10).

Замените

Если вам нужно обновление без перехода на новую строку, то методы set_postfix() или set_post_fix_str() будут полезны. Они идеально подходят для добавления информативных примечаний:

Python
Скопировать код
from tqdm import tqdm
import time

for i in tqdm(range(100), desc="Передача файлов"):
    time.sleep(0.1)
    tqdm.set_postfix_str(f"Обрабатывается файл номер: {i+1}")

Каждое сообщение отображается в то же место строки, что помогает избегать переполнения вывода лишними переносами.

Контроль частоты обновлений

Если обновление прогресса происходит слишком быстро, вы можете установить задержки, чтобы успеть отследить процесс:

Python
Скопировать код
from tqdm import tqdm
import time

for i in tqdm(range(100)):
    time.sleep(0.01)

Благодаря этим задержкам, обновление происходит каждые 0.01 секунды, что позволяет видеть каждый этап выполнения задачи.

Визуализация

Добавление пользовательского сообщения в индикатор tqdm — дело простое и занимающее всего пару строк. Вы можете украсить свой индикатор прогресса интересными деталями, как неоновую вывеску:

Python
Скопировать код
from tqdm import tqdm
import time

for i in tqdm(range(10), desc='Инициализация'):
    time.sleep(0.5) 

for i in tqdm(range(10), desc='Магия'):
    tqdm.write(f'Текущий шаг: {i}')
    time.sleep(0.5)
Markdown
Скопировать код
До: [➡️➡️➡️ | 60% | 🏁 ]
После: [➡️➡️➡️ | Текущий шаг: 6 из 10 | 🏁 ]

Такой индикатор будет наполнен уникальными, контекстными сообщениями, которые делают отображение прогресса более наглядным и приятным визуально.

Необычная функция

Использование set_postfix() обеспечивает более детальное отображение информации, при этом не усложняя визуальное восприятие:

Python
Скопировать код
from tqdm import tqdm

for i in tqdm(range(10), desc="Детализация процесса"):
    tqdm.set_postfix(Stage=i, refresh=True)

set_postfix() позволяет получать лаконичные и информативные обновления, всего лишь с помощью одной строчки кода!

В курсе актуальных обновлений: Обновление tqdm

Регулярно обновляйте tqdm до последней версии, чтобы вовремя узнать о новых возможностях, таких как параметр refresh=True и другие. Для обновления достаточно воспользоваться одной командой pip:

shell
Скопировать код
pip install --upgrade tqdm

Применение новых возможностей в Python 3.8

С появлением оператора присваивания (валруса) := в Python 3.8, ваш код может стать ещё более компактным. Пример цикла с использованием tqdm и оператора :=:

Python
Скопировать код
from tqdm import tqdm

while (n := next(my_iterable, None)) is not None:
    with tqdm(total=n) as pbar:
        pass

Полезные материалы

  1. Документация tqdm — основной источник информации по работе с tqdm.
  2. GitHub – tqdm/tqdm — примеры использования и фрагменты кода.
  3. tqdm · PyPI — для установки и проверки актуальной версии tqdm.
  4. Индикаторы прогресса в Python на Towards Data Science — варианты применения tqdm.
  5. time — Доступ к и обработка значения времени — документация Python 3.12.2 — подробности о time.sleep.
  6. sys — Системно-специфические параметры и функции — документация Python 3.12.2 — больше информации о настройке вывода с tqdm.
Проверь как ты усвоил материалы статьи
Пройди тест и узнай насколько ты лучше других читателей
Какой метод используется для обновления сообщений в tqdm?
1 / 5