日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > python >内容正文

python

Python如何在控制台显示进度条

發(fā)布時(shí)間:2025/3/20 python 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Python如何在控制台显示进度条 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

我們?cè)趯懸恍﹑ython程序時(shí),如果程序運(yùn)行時(shí)間較長(zhǎng),我們希望能夠有一個(gè)進(jìn)度條來動(dòng)態(tài)的展示程序運(yùn)行進(jìn)度。

首先能想到的做法是用print將執(zhí)行到第幾步打印出來,但這樣顯然不是我們想要的進(jìn)度條,顯示進(jìn)度占用了很多行,原因是print在末尾默認(rèn)加上了”\n”換行符。詳見《你應(yīng)該知道的print》。

我們對(duì)進(jìn)度條的需求:一是進(jìn)度信息在一行中顯示;二是每次都能夠動(dòng)態(tài)擦除一行中上一次的內(nèi)容。那么很自然的想到print有沒有相應(yīng)的轉(zhuǎn)義符,還真有這么一個(gè),”\r”。

import time N = 1000 for i in range(N):print("進(jìn)度:{0}%".format(round((i + 1) * 100 / N)), end="\r")time.sleep(0.01)

輸出格式:
100%

進(jìn)度顯示的問題解決了,有時(shí)候我們需要有一些時(shí)間方面的顯示;例如已經(jīng)耗費(fèi)了多長(zhǎng)時(shí)間,預(yù)計(jì)還剩下多少時(shí)間等。

import time N = 1000 st = time.clock() for i in range(N):p = round((i + 1) * 100 / N)duration = round(time.clock() - st, 2)remaining = round(duration * 100 / (0.01 + p) - duration, 2)print("進(jìn)度:{0}%,已耗時(shí):{1}s,預(yù)計(jì)剩余時(shí)間:{2}s".format(p, duration, remaining), end="\r")time.sleep(0.01)

輸出格式:進(jìn)度:100%,已耗時(shí):10s,預(yù)計(jì)剩余時(shí)間:10s

上面代碼中計(jì)算remaining時(shí)p加上了0.01,是為了避免除0問題。

至此,控制臺(tái)進(jìn)度條可以工作了,但代碼在不同地方使用時(shí)會(huì)比較冗余,理解了原理,可以封裝成一個(gè)庫。

實(shí)際上早就有人已經(jīng)做好這個(gè)工作了,而且功能更加強(qiáng)大豐富。這里推薦progressbar,下載地址為https://pypi.python.org/pypi/progressbar2

  • 簡(jiǎn)單用法1
import time import progressbar p = progressbar.ProgressBar() N = 1000 for i in p(range(N)):time.sleep(0.01)
  • 簡(jiǎn)單用法2
import time import progressbar p = progressbar.ProgressBar() N = 1000 p.start(N) for i in range(N):time.sleep(0.01)p.update(i+1) p.finish()

兩種簡(jiǎn)單用法的輸出格式都是:
100% (1000 of 1000) |#####################| Elapsed Time: 0:00:10 Time: 0:00:10
包含了百分百進(jìn)度,數(shù)量進(jìn)度,#號(hào)前進(jìn)條,耗費(fèi)時(shí)間,剩余時(shí)間。

  • 高級(jí)點(diǎn)的用法(自己配置輸出格式)
import time import progressbar bar = progressbar.ProgressBar(widgets=[' [', progressbar.Timer(), '] ',progressbar.Percentage(),' (', progressbar.ETA(), ') ', ]) for i in bar(range(1000)):time.sleep(0.01)

輸出格式:
[Elapsed Time: 0:00:10] 100% (Time: 0:00:10)

主要方式有如下幾種,可自由搭配:

'Timer', # 計(jì)時(shí)器 'ETA', # 預(yù)計(jì)剩余時(shí)間 'AbsoluteETA', # 預(yù)計(jì)結(jié)束的絕對(duì)時(shí)間,耗時(shí)很長(zhǎng)時(shí)使用較方便 'Percentage', # 百分比進(jìn)度,30% 'SimpleProgress', # 計(jì)數(shù)進(jìn)度,300/1000 'Counter', # 單純計(jì)數(shù) 'Bar' # “#”號(hào)進(jìn)度條

例如:

import time import progressbar bar = progressbar.ProgressBar(widgets=[progressbar.Percentage(),' (', progressbar.SimpleProgress(), ') ',' (', progressbar.AbsoluteETA(), ') ',]) for i in bar(range(1000)):time.sleep(0.01)

輸出示例:
54% ( 545 of 1000) (Estimated finish time: 2016-11-06 19:26:15)

總結(jié)

以上是生活随笔為你收集整理的Python如何在控制台显示进度条的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。