欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python實(shí)現(xiàn)控制臺(tái)中的進(jìn)度條功能代碼

 更新時(shí)間:2017年12月22日 14:51:48   作者:_icrazy_  
下面小編就為大家分享一篇Python實(shí)現(xiàn)控制臺(tái)中的進(jìn)度條功能代碼,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧

進(jìn)度條最主要的問(wèn)題就是所有字符全部在同一行,而且可以修改。

然而當(dāng)執(zhí)行print語(yǔ)句的時(shí)候,python會(huì)在打印完這個(gè)語(yǔ)句的同時(shí)在結(jié)尾加上‘\n',也就是換行,這就導(dǎo)致在控制臺(tái)下一旦被print之后就無(wú)法再修改了。所以我們現(xiàn)在的輸出就不能再使用print來(lái)完成了。

我們要使用的是來(lái)自sys庫(kù)的sys.stdout.write()函數(shù),這個(gè)函數(shù)會(huì)在控制臺(tái)輸出這個(gè)字符串的同時(shí)不加上任何結(jié)尾,這就意味著這個(gè)輸出還沒(méi)有完全結(jié)束。通過(guò)sys.stdout.flush()函數(shù)可以把輸出暫時(shí)打印在控制臺(tái)中(造成print的假象,我們姑且先叫這個(gè)假輸出)。那么如果我們使用‘r'這個(gè)轉(zhuǎn)義字符(回到行首),一切看起來(lái)是不是就合理很多了呢?

也就是說(shuō):打印字符串的時(shí)候,沒(méi)有加上'\n',同時(shí)讓光標(biāo)回到行首,再把當(dāng)前緩沖區(qū)顯示出來(lái),也就好象是print了一樣,但是這時(shí)候光標(biāo)還在原來(lái)的位置。

一個(gè)例子

[經(jīng)測(cè)試,在Linux終端中執(zhí)行才有效果,pycharm中調(diào)試輸出沒(méi)有效果]

import sys, time
for i in range(5):
 sys.stdout.write('HELLO: %05d' % i)
 sys.stdout.flush()
 time.sleep(1)

在終端下執(zhí)行這段代碼就會(huì)得到簡(jiǎn)單的進(jìn)度條效果。

接下來(lái)還需要解決兩個(gè)問(wèn)題:

一:清空緩沖區(qū)

有些聰明的讀者可能發(fā)現(xiàn),當(dāng)新的字符串比之前短的時(shí)候會(huì)出現(xiàn)問(wèn)題,比如下面這段代碼:

import sys, time
for i in range(5):
 sys.stdout.write(str(i) * (5 - i) + '\r')
 sys.stdout.flush()
 time.sleep(1)

運(yùn)行后發(fā)現(xiàn)結(jié)果跟我們希望的不太一樣。

其實(shí)是因?yàn)橐呀?jīng)被flush出去的字符并不會(huì)主動(dòng)清空,所以只有新寫入的被修改了。針對(duì)這點(diǎn)我目前的解決方案是先輸出一波空格把之前的字符串沖掉然后重新寫:

import sys, time

for i in range(5):
sys.stdout.write(' ' * 10 + '\r')
sys.stdout.flush()
sys.stdout.write(str(i) * (5 - i) + '\r')
sys.stdout.flush()
time.sleep(1)

二:固定底邊輸出

有時(shí)候我們希望在進(jìn)度條加載的同時(shí)還有一些其他的輸出。

我們不妨在刷新掉上一次輸出之后輸出所需輸出的字符串,然后在假輸出進(jìn)度條。

采用如下代碼:

import sys, time
for i in range(5):
 sys.stdout.write(' ' * 10 + '\r')
 sys.stdout.flush()
 print i
 sys.stdout.write(str(i) * (5 - i) + '\r')
 sys.stdout.flush()
 time.sleep(1)

就可以完成所需任務(wù)了。

怎么樣,其實(shí)原理還是挺簡(jiǎn)單的吧?

這里給出一個(gè)自己實(shí)現(xiàn)的類用來(lái)打印進(jìn)度條:

import sys, time
class ProgressBar:
 def __init__(self, count = 0, total = 0, width = 50):
  self.count = count
  self.total = total
  self.width = width
 def move(self):
  self.count += 1
 def log(self, s):
  sys.stdout.write(' ' * (self.width + 9) + '\r')
  sys.stdout.flush()
  print s
  progress = self.width * self.count / self.total
  sys.stdout.write('{0:3}/{1:3}: '.format(self.count, self.total))
  sys.stdout.write('#' * progress + '-' * (self.width - progress) + '\r')
  if progress == self.width:
   sys.stdout.write('\n')
  sys.stdout.flush()
bar = ProgressBar(total = 10)
for i in range(10):
 bar.move()
 bar.log('We have arrived at: ' + str(i + 1))
 time.sleep(1)

效果如下:

這樣就可以方便的在一些任務(wù)中查看程序運(yùn)行的進(jìn)度了,比如爬蟲(chóng)、機(jī)器學(xué)習(xí)等并不知道要花多少時(shí)間等工作也都可以有形象的時(shí)間把握了。

以上這篇Python實(shí)現(xiàn)控制臺(tái)中的進(jìn)度條功能代碼就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • python給指定csv表格中的聯(lián)系人群發(fā)郵件(帶附件的郵件)

    python給指定csv表格中的聯(lián)系人群發(fā)郵件(帶附件的郵件)

    這篇文章主要介紹了python給指定csv表格中的聯(lián)系人群發(fā)郵件,本文通過(guò)代碼講解的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-12-12
  • Python中執(zhí)行分位數(shù)回歸的示例詳解

    Python中執(zhí)行分位數(shù)回歸的示例詳解

    分位數(shù)回歸是線性回歸的擴(kuò)展版本,分位數(shù)回歸構(gòu)建一組變量(也稱為自變量)和分位數(shù)(也稱為因變量)之間的關(guān)系,下面我們就來(lái)看看Python如何執(zhí)行分位數(shù)回歸吧
    2024-03-03
  • Python 生成器,迭代,yield關(guān)鍵字,send()傳參給yield語(yǔ)句操作示例

    Python 生成器,迭代,yield關(guān)鍵字,send()傳參給yield語(yǔ)句操作示例

    這篇文章主要介紹了Python 生成器,迭代,yield關(guān)鍵字,send()傳參給yield語(yǔ)句操作,結(jié)合實(shí)例形式分析了Python生成器、迭代、yield關(guān)鍵字及異常處理相關(guān)操作技巧,需要的朋友可以參考下
    2019-10-10
  • Python?OpenCV超詳細(xì)講解基本功能

    Python?OpenCV超詳細(xì)講解基本功能

    OpenCV用C++語(yǔ)言編寫,它具有C?++,Python,Java和MATLAB接口,并支持Windows,Linux,Android和Mac?OS,OpenCV主要傾向于實(shí)時(shí)視覺(jué)應(yīng)用,并在可用時(shí)利用MMX和SSE指令,本篇文章帶你了解OpenCV的基本功能
    2022-04-04
  • 利用Python進(jìn)行數(shù)據(jù)可視化的實(shí)例代碼

    利用Python進(jìn)行數(shù)據(jù)可視化的實(shí)例代碼

    數(shù)據(jù)可視化和數(shù)據(jù)挖掘都是探索數(shù)據(jù)和分析數(shù)據(jù)的一種手段,下面這篇文章主要給大家介紹了關(guān)于如何利用Python進(jìn)行數(shù)據(jù)可視化的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2021-09-09
  • 在Python的Django框架中更新數(shù)據(jù)庫(kù)數(shù)據(jù)的方法

    在Python的Django框架中更新數(shù)據(jù)庫(kù)數(shù)據(jù)的方法

    這篇文章主要介紹了在Python的Django框架中更新數(shù)據(jù)庫(kù)數(shù)據(jù),對(duì)此Django框架中提供了便利的插入和更新方法,需要的朋友可以參考下
    2015-07-07
  • pycharm 主題theme設(shè)置調(diào)整仿sublime的方法

    pycharm 主題theme設(shè)置調(diào)整仿sublime的方法

    今天小編就為大家分享一篇pycharm 主題theme設(shè)置調(diào)整仿sublime的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-05-05
  • python中如何利用matplotlib畫多個(gè)并列的柱狀圖

    python中如何利用matplotlib畫多個(gè)并列的柱狀圖

    python是一個(gè)很有趣的語(yǔ)言,可以在命令行窗口運(yùn)行,下面這篇文章主要給大家介紹了關(guān)于python中如何利用matplotlib畫多個(gè)并列的柱狀圖的相關(guān)資料,需要的朋友可以參考下
    2022-01-01
  • Python Mock模塊原理及使用方法詳解

    Python Mock模塊原理及使用方法詳解

    這篇文章主要介紹了Python Mock模塊原理及使用方法詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-07-07
  • Python基于pandas繪制散點(diǎn)圖矩陣代碼實(shí)例

    Python基于pandas繪制散點(diǎn)圖矩陣代碼實(shí)例

    這篇文章主要介紹了Python基于pandas繪制散點(diǎn)圖矩陣代碼實(shí)例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-06-06

最新評(píng)論