Python 中的進度條

Manav Narula 2023年1月30日
  1. 在 Python 中使用 tdqm 模組建立進度條
  2. 使用 Python 中的 progressbar 模組建立進度條
  3. 在 Python 中建立自己的函式以建立進度條
Python 中的進度條

在程式設計領域,我們要處理大量的程式碼。一個程式可能會花費很多時間來編譯和執行。因此,瞭解已經取得了多少進展以及該程式完成的預計時間是有一點幫助的。在這種情況下,我們可以在 Python 中使用進度條。而且,它們可以幫助我們確定程式是否在中間停止。

在 Python 中,我們有許多可用的庫,它們可以幫助我們為程式建立一個簡單的進度條來幫助我們。在本教程中,我們將逐一討論每種方法。

在 Python 中使用 tdqm 模組建立進度條

tdqm 庫具有用於建立基本進度條的快速有效的框架。它在終端機,python 膝上型電腦上執行良好,並且與 Windows,Linux 和 macOS 相容。

在下面的程式碼中,我們使用此模組中的函式建立一個簡單的進度條。

from time import sleep
from tqdm import tqdm

for i in tqdm(range(10)):
    sleep(0.2)

我們遍歷一個迴圈,在每次迭代中,進度條也會增加。sleep() 函式用於將編譯器暫停一些指定的秒數。請注意,預設情況下,該條顯示剩餘時間,每秒迭代次數和百分比。

在本教程討論的所有模組中,此模組的開銷最少。

使用 Python 中的 progressbar 模組建立進度條

progressbar 模組的功能幾乎和 tdqm 模組一樣。除此之外,它還有一些選項可以設定進度條的動畫處理,並使用進度條上顯示的元件。

以下程式碼顯示了此示例。

import time
import progressbar

for i in progressbar.progressbar(range(100)):
    time.sleep(0.02)

progressbar2 在 Python 中也存在,並且是 progressbar 的分支。由於其強大的可自定義功能,它非常受歡迎。它還支援帶有進度條的列印語句。不利的一面是,該模組已多年未維護。

請注意,還有更多的庫可供使用,例如 alive-progressprogress,它們可以幫助製作進度條,但是這兩個庫是最常用的。它們之間的唯一區別是這些庫提供的動畫和其他自定義項。

在 Python 中建立自己的函式以建立進度條

我們還可以建立一個類似於進度條的簡單函式。下面的程式碼實現了這一點。

import time
import sys


def progressbar(it, prefix="", size=60, file=sys.stdout):
    count = len(it)

    def show(j):
        x = int(size * j / count)
        file.write("%s[%s%s] %i/%i\r" % (prefix, "#" * x, "." * (size - x), j, count))
        file.flush()
        file.write("\n")

    show(0)
    for i, item in enumerate(it):
        yield item
        show(i + 1)
        file.write("\n")
    file.flush()


for i in progressbar(range(15), "Computing: ", 40):
    time.sleep(0.1)

輸出:

Computing: [........................................] 0/15
Computing: [##......................................] 1/15
Computing: [#####...................................] 2/15
Computing: [########................................] 3/15
Computing: [##########..............................] 4/15
Computing: [#############...........................] 5/15
Computing: [################........................] 6/15
Computing: [##################......................] 7/15
Computing: [#####################...................] 8/15
Computing: [########################................] 9/15
Computing: [##########################..............] 10/15
Computing: [#############################...........] 11/15
Computing: [################################........] 12/15
Computing: [##################################......] 13/15
Computing: [#####################################...] 14/15
Computing: [########################################] 15/15

我們計算所需的總迭代次數,在每次迭代中,我們增加 # 符號並進行列印。

作者: Manav Narula
Manav Narula avatar Manav Narula avatar

Manav is a IT Professional who has a lot of experience as a core developer in many live projects. He is an avid learner who enjoys learning new things and sharing his findings whenever possible.

LinkedIn