# Python如何實現一個進度條
在數據處理、文件下載或長時間運行的任務中,進度條能直觀展示程序執行狀態。Python通過標準庫或第三方庫可以輕松實現多種風格的進度條。
## 一、基礎實現方法
### 1. 使用`print`函數
最簡單的進度條可通過打印字符實現:
```python
import time
def simple_progress(total):
for i in range(total + 1):
print(f'\rProgress: [{"#" * i}{" " * (total - i)}] {i}/{total}', end='')
time.sleep(0.1)
simple_progress(20)
關鍵點:
- \r
將光標移回行首實現原地更新
- end=''
避免換行
sys.stdout
更底層的控制方式:
import sys
def sys_progress(total):
for i in range(total + 1):
sys.stdout.write(f'\r[{i/total:.0%}] {"=" * i}>')
sys.stdout.flush()
time.sleep(0.1)
tqdm
庫(第三方但已成為事實標準)from tqdm import tqdm
import time
for i in tqdm(range(100), desc="Processing"):
time.sleep(0.02)
特性: - 自動計算剩余時間 - 支持Jupyter Notebook - 多線程/進程支持
def progress_with_eta(total):
start_time = time.time()
for i in range(total + 1):
elapsed = time.time() - start_time
eta = (total - i) * (elapsed / i) if i > 0 else 0
print(f'\r{i/total:.0%} | ETA: {eta:.1f}s', end='')
time.sleep(0.1)
使用tqdm
實現:
from tqdm import tqdm
import concurrent.futures
def worker(data):
time.sleep(0.1)
return data * 2
with concurrent.futures.ThreadPoolExecutor() as executor:
results = list(tqdm(executor.map(worker, range(50)), total=50))
from tkinter import *
from tkinter.ttk import Progressbar
root = Tk()
progress = Progressbar(root, length=300)
progress.pack()
def update_progress():
for i in range(101):
progress['value'] = i
root.update_idletasks()
time.sleep(0.05)
Button(root, text="Start", command=update_progress).pack()
root.mainloop()
logging
與進度條結合選擇方案優先級:
1. 優先使用tqdm
2. 簡單場景用print
基礎實現
3. GUI程序使用對應框架的進度組件
通過合理使用進度條,可以顯著提升命令行程序的用戶體驗。 “`
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。