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

Пройдите тест, узнайте какой профессии подходите

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

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

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

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

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

Кинга Идем в IT: пошаговый план для смены профессии

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

Одной из удобных функций 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).

Замените tqdm.write на компактное обновление без перехода на новую строку

Если вам нужно обновление без перехода на новую строку, то методы 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()

Использование 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.