How I Create a Progress Bar in Python Using tqdm

As a Python developer, I often run into situations where my script takes a while to run maybe it’s processing files, downloading data, or simply doing something that takes time. I never know how long it’s going to take unless I add some sort of feedback.

That’s where tqdm comes in. Today, I want to share how I integrated this amazing little tool into my Python projects to create elegant, real-time progress bars that work right in the terminal.

Install tqdm

Before doing anything else, I had to install tqdm. Thankfully, it’s super easy:

pip install tqdm

This installs the library that makes all the magic happen. tqdm stands for taqaddum (تقدّم) in Arabic, which means “progress.” And that’s exactly what it shows a clear, concise view of your progress.

Basic Delay Loop

Before using tqdm, my loop looked like this:

import time

for i in range(10):
time.sleep(2)

This simply pauses for 2 seconds, 10 times. But visually? Nothing. You just sit there waiting.

It works, but it’s not user friendly.

Add a tqdm Progress Bar

I updated my loop like this:

from tqdm import tqdm
import time

for i in tqdm(range(10)):
time.sleep(2)

Now, as each iteration completes, I get a live progress bar that shows how much is done, how much is left, and even the estimated time remaining. It looks something like:

 60%|██████████████████              | 6/10 [00:12<00:08, 2.00s/it]

This instantly made my scripts feel more polished and user-aware.

Practical Enhancement

Once I got the basics down, I started exploring how I could use tqdm in real-world projects. Here are a few handy examples I’ve personally implemented.

File Processing Simulation

from tqdm import tqdm
import time

files = ['file1.txt', 'file2.txt', 'file3.txt']

for file in tqdm(files, desc="Processing files"):
# Simulate file processing
time.sleep(1)

This is perfect when I’m iterating through files in a directory. The desc argument gives the bar a label—handy for clarity.

Data Download Simulation

from tqdm import trange
import time

for i in trange(5, desc="Downloading"):
time.sleep(1)

trange is a shorthand for tqdm(range(...)). I use this when simulating or performing batch downloads.

Nest Loops with tqdm

from tqdm import tqdm
import time

for i in tqdm(range(3), desc="Outer Loop"):
for j in tqdm(range(5), desc="Inner Loop", leave=False):
time.sleep(0.5)

This one is great for more complex tasks say, grid searches or nested iterations. leave=False ensures the inner progress bar doesn’t clutter the screen after it’s done.

Progress Bar in a List Comprehension

from tqdm import tqdm
import time

results = [time.sleep(0.1) for _ in tqdm(range(100), desc="Fast loop")]

Even in list comprehensions, tqdm doesn’t disappoint. I use this when doing fast, repetitive tasks like transformations or batch updates.

Final Thought

I can honestly say that adding tqdm to my Python scripts was a game changer. Whether I’m building personal projects or professional tools, having a real-time visual indicator of progress makes everything feel more responsive and polished.

Related blog posts