最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時(shí)間:2015年11月10日 11:52:39   投稿:lijiao  
這篇文章主要介紹了python控制臺(tái)中實(shí)現(xiàn)進(jìn)度條功能的方法,想要了解的朋友可以參考一下

我們大多數(shù)人都希望寫(xiě)一些簡(jiǎn)單的python腳本的同時(shí)都想能夠在程序運(yùn)行的過(guò)程中實(shí)現(xiàn)進(jìn)度條的功能以便查看程序運(yùn)行的速度或者進(jìn)度。今天就和大家探討這個(gè)問(wèn)題:如何在python控制臺(tái)中實(shí)現(xiàn)進(jìn)度條功

進(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è)例子:

import sys, time

for i in range(5):
 sys.stdout.write('{0}/5\r'.format(i + 1))
 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)清空,所以只有新寫(xiě)入的被修改了。針對(duì)這點(diǎn)我目前的解決方案是先輸出一波空格把之前的字符串沖掉然后重新寫(xiě):

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)用來(lái)打印進(jìn)度條:

# -*- coding:utf-8 -*-

# Copyright: Lustralisk
# Author: Cedric Liu
# Date: 2015-11-08

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控制臺(tái)中實(shí)現(xiàn)進(jìn)度條功能的方法,并給出了自己實(shí)現(xiàn)的類(lèi)用來(lái)打印進(jìn)度條,希望對(duì)大家的學(xué)習(xí)有所幫助。

相關(guān)文章

  • python學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)實(shí)例代碼

    python學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)實(shí)例代碼

    數(shù)據(jù)結(jié)構(gòu)就是用來(lái)將數(shù)據(jù)組織在一起的結(jié)構(gòu)。換句話說(shuō),數(shù)據(jù)結(jié)構(gòu)是用來(lái)存儲(chǔ)一系列關(guān)聯(lián)數(shù)據(jù)的東西。在Python中有四種內(nèi)建的數(shù)據(jù)結(jié)構(gòu),分別是List、Tuple、Dictionary以及Set。本文將通過(guò)實(shí)例來(lái)介紹這些數(shù)據(jù)結(jié)構(gòu)的用法。
    2015-05-05
  • Python中求對(duì)數(shù)方法總結(jié)

    Python中求對(duì)數(shù)方法總結(jié)

    這篇文章主要介紹了Python中求對(duì)數(shù)方法總結(jié),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-03-03
  • python pcm音頻添加頭轉(zhuǎn)成Wav格式文件的方法

    python pcm音頻添加頭轉(zhuǎn)成Wav格式文件的方法

    今天小編就為大家分享一篇python pcm音頻添加頭轉(zhuǎn)成Wav格式文件的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-01-01
  • Python 實(shí)現(xiàn)將numpy中的nan和inf,nan替換成對(duì)應(yīng)的均值

    Python 實(shí)現(xiàn)將numpy中的nan和inf,nan替換成對(duì)應(yīng)的均值

    這篇文章主要介紹了Python 實(shí)現(xiàn)將numpy中的nan和inf,nan替換成對(duì)應(yīng)的均值,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-06-06
  • Django使用echarts進(jìn)行可視化展示的實(shí)踐

    Django使用echarts進(jìn)行可視化展示的實(shí)踐

    可視化是將數(shù)據(jù)轉(zhuǎn)換成圖形或圖像在屏幕上顯示出來(lái),本文主要介紹了Django使用echarts進(jìn)行可視化展示的實(shí)踐,感興趣的可以了解一下
    2021-06-06
  • numpy 實(shí)現(xiàn)返回指定行的指定元素的位置索引

    numpy 實(shí)現(xiàn)返回指定行的指定元素的位置索引

    這篇文章主要介紹了numpy 實(shí)現(xiàn)返回指定行的指定元素的位置索引操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2021-05-05
  • Python斷言assert的用法代碼解析

    Python斷言assert的用法代碼解析

    這篇文章主要介紹了Python斷言assert的用法代碼解析,分享了相關(guān)代碼示例,小編覺(jué)得還是挺不錯(cuò)的,具有一定借鑒價(jià)值,需要的朋友可以參考下
    2018-02-02
  • 用Python寫(xiě)腳本,實(shí)現(xiàn)完全備份和增量備份的示例

    用Python寫(xiě)腳本,實(shí)現(xiàn)完全備份和增量備份的示例

    下面小編就為大家分享一篇用Python寫(xiě)腳本,實(shí)現(xiàn)完全備份和增量備份的示例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-04-04
  • Python實(shí)現(xiàn)的基于優(yōu)先等級(jí)分配糖果問(wèn)題算法示例

    Python實(shí)現(xiàn)的基于優(yōu)先等級(jí)分配糖果問(wèn)題算法示例

    這篇文章主要介紹了Python實(shí)現(xiàn)的基于優(yōu)先等級(jí)分配糖果問(wèn)題算法,涉及Python針對(duì)列表的遍歷、判斷、計(jì)算等相關(guān)操作技巧,需要的朋友可以參考下
    2018-04-04
  • 使用Python的turtle模塊繪制櫻花樹(shù)的代碼示例

    使用Python的turtle模塊繪制櫻花樹(shù)的代碼示例

    Python的turtle模塊是一個(gè)直觀的圖形化編程工具,讓用戶(hù)通過(guò)控制海龜在屏幕上的移動(dòng)來(lái)繪制各種形狀和圖案,在接下來(lái)的文章中,我將通過(guò)一個(gè)生動(dòng)的例子——繪制一幅櫻花樹(shù)圖畫(huà)——來(lái)深入探討turtle模塊的實(shí)用性,需要的朋友可以參考下
    2024-04-04

最新評(píng)論

皮山县| 思茅市| 康定县| 伊宁市| 通许县| 洞口县| 桂平市| 莫力| 上饶市| 遵义市| 安龙县| 西城区| 上高县| 岐山县| 三明市| 沙湾县| 个旧市| 华坪县| 新建县| 左云县| 彰化市| 宣化县| 西乡县| 南漳县| 泗洪县| 肥城市| 西和县| 凌云县| 弥渡县| 张掖市| 洪泽县| 昭平县| 贡觉县| 通州区| 富阳市| 兴国县| 郴州市| 大田县| 福鼎市| 南通市| 固镇县|