进度条和一般的print区别在哪里呢?

答案就是print会输出一个\n,也就是换行符,这样光标移动到了下一行行首,接着输出,之前已经通过stdout输出的东西依旧保留,而且保证我们在下面看到最新的输出结果。

进度条不然,我们必须再原地输出才能保证他是一个进度条,否则换行了怎么还叫进度条?

最简单的办法就是,再输出完毕后,把光标移动到行首,继续在那里输出更长的进度条即可实现,新的更长的进度条把旧的短覆盖,就形成了动画效果。

可以想到那个转义符了吧,那就是 \r。

转义符\r就可以把光标移动到行首而不换行,转义符\n就把光标移动到行首并且换行。

在python中,输出stdout(标准输出)可以使用sys.stdout.write

例如:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

#!/usr/bin/env python

# -*- coding=utf-8 -*-

#Using GPL v2

#Author: ihipop@gmail.com

##2010-10-27 22:07

"""

Usage:

Just A Template

"""

from

__future__

import

division

import

sys

,

time

j

=

'#'

if

__name__

==

'__main__'

:

for

i

in

range

(

1

,

61

)

:

j

+

=

'#'

sys

.

stdout

.

write

(

str

(

int

(

(

i

/

60

)

*

100

)

)

+

'%  ||'

+

j

+

'->'

+

"\r"

)

sys

.

stdout

.

flush

(

)

time

.

sleep

(

0.5

)

print

第二种思路是用转义符\b

转义符\b是退格键,也就是说把输出的光标往回退格子,这样就可以不用+=了,例如:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

#!/usr/bin/env python

# -*- coding=utf-8 -*-

#Using GPL v2

#Author: ihipop@gmail.com

#2010-10-27 22:07

"""

Usage:

Just A Template

"""

from

__future__

import

division

import

sys

,

time

if

__name__

==

'__main__'

:

for

i

in

range

(

1

,

61

)

:

sys

.

stdout

.

write

(

'#'

+

'->'

+

"\b\b"

)

sys

.

stdout

.

flush

(

)

time

.

sleep

(

0.5

)

print

光标回退2格,写个#再回退,再写,达到增长的目的了

不过写这么多似乎是废话,在耳边常常听到一句话:那就是不要重复造轮子。实际上python有丰富发lib帮你实现这个东西,你完全可以把心思放在逻辑开发上而不用注意这些小细节

下面就是基本使用举例:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

#!/usr/bin/env python

# -*- coding=utf-8 -*-

#Using GPL v2

#Author: ihipop@gmail.com

#2010-10-27 22:53

"""

Usage:

Just A Template

"""

from

__future__

import

division

import

sys

,

time

from

progressbar

import

*

total

=

1000

#基本用法

progress

=

ProgressBar

(

)

for

i

in

progress

(

range

(

total

)

)

:

time

.

sleep

(

0.01

)

pbar

=

ProgressBar

(

)

.

start

(

)

for

i

in

range

(

1

,

1000

)

:

pbar

.

update

(

int

(

(

i

/

(

total

-

1

)

)

*

100

)

)

time

.

sleep

(

0.01

)

pbar

.

finish

(

)

#高级用法

widgets

=

[

'Progress: '

,

Percentage

(

)

,

' '

,

Bar

(

marker

=

RotatingMarker

(

'>-='

)

)

,

' '

,

ETA

(

)

,

' '

,

FileTransferSpeed

(

)

]

pbar

=

ProgressBar

(

widgets

=

widgets

,

maxval

=

10000000

)

.

start

(

)

for

i

in

range

(

1000000

)

:

# do something

pbar

.

update

(

10

*

i

+

1

)

time

.

sleep

(

0.0001

)

pbar

.

finish

(

)

官方示例下载,移步这里:

http://code.google.com/p/python-progressbar/source/browse/progressbar/examples.py

再发一个类:

Python

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

#!/usr/bin/env python

# -*- coding=utf-8 -*-

#Using GPL v2

#Author: ihipop@gmail.com

#2010-10-30 13:59

"""

Usage:

Just A Template

"""

class

progressbarClass

:

def

__init__

(

self

,

finalcount

,

progresschar

=

None

)

:

import

sys

self

.

finalcount

=

finalcount

self

.

blockcount

=

0

#

# See if caller passed me a character to use on the

# progress bar (like "*").  If not use the block

# character that makes it look like a real progress

# bar.

#

if

not

progresschar

:

self

.

block

=

chr

(

178

)

else

:

self

.

block

=

progresschar

#

# Get pointer to sys.stdout so I can use the write/flush

# methods to display the progress bar.

#

self

.

f

=

sys

.

stdout

#

# If the final count is zero, don't start the progress gauge

#

if

not

self

.

finalcount

:

return

self

.

f

.

write

(

'\n------------------- % Progress -------------------\n'

)

return

def

progress

(

self

,

count

)

:

#

# Make sure I don't try to go off the end (e.g. >100%)

#

count

=

min

(

count

,

self

.

finalcount

)

#

# If finalcount is zero, I'm done

#

if

self

.

finalcount

:

percentcomplete

=

int

(

round

(

100

*

count

/

self

.

finalcount

)

)

if

percentcomplete

<

1

:

percentcomplete

=

1

else

:

percentcomplete

=

100

#print "percentcomplete=",percentcomplete

blockcount

=

int

(

percentcomplete

/

2

)

#print "blockcount=",blockcount

if

blockcount

>

self

.

blockcount

:

for

i

in

range

(

self

.

blockcount

,

blockcount

)

:

self

.

f

.

write

(

self

.

block

)

self

.

f

.

flush

(

)

if

percentcomplete

==

100

:

self

.

f

.

write

(

"\n"

)

self

.

blockcount

=

blockcount

return

if

__name__

==

"__main__"

:

from

time

import

sleep

pb

=

progressbarClass

(

8

,

"*"

)

count

=

0

while

count

<

9

:

count

+

=

1

pb

.

progress

(

count

)

sleep

(

0.2

)

Author Info :

Please Reserve This Link,Thanks!

python写界面进度条程序_Python中如何写控制台进度条的整理相关推荐

  1. python如何注释一段代码_Python 中如何写注释

    在写 Python 代码的时候,一个很好的编码实践就是使得你的代码简洁,易懂.组织代码,设置变量,以及给函数有意义的名字,都是几个不错的方法. 另外一个提高代码可读性的方式就是使用注释.一个注释就是可 ...

  2. python 预测下一年数据 程序_python中神经网络预测时间序列数据

    我是神经网络的初学者,尝试用python语言预测5个输入的温度值(输出).我使用python中的keras包来工作神经网络.在 此外,我使用了两种算法,即前向神经网络(回归)和递归神经网络(LSTM) ...

  3. Python基础_第3章_Python中的循环结构

    Python基础_第3章_Python中的循环结构 文章目录 Python基础_第3章_Python中的循环结构 Python中的循环结构 一.回顾分支练习题 1.判断是否为一个合法三角形 2.求世界 ...

  4. Python基础_第5章_Python中的数据序列

    Python基础_第5章_Python中的数据序列 文章目录 Python基础_第5章_Python中的数据序列 Python中的数据序列 一.字典--Python中的==查询==神器 1.为什么需要 ...

  5. 用python编写一个点餐程序_Python写一个自动点餐程序

    原博文 2019-08-09 10:45 − # Python写一个自动点餐程序 ## 为什么要写这个 公司现在用meican作为点餐渠道,每天规定的时间是早7:00-9:40点餐,有时候我经常容易忘 ...

  6. python写一个类方法_python中如何写类

    类的定义 Python中,定义类是通过class关键字,例如我们定义一个存储学生信息的类: class Student(object): pass class后面紧接着是类名,即Student,类名通 ...

  7. python写用用户名密码程序_python写用’户登录程序‘的过程

    作业需求: 基础需求: 让用户输入用户名密码 认证成功后显示欢迎信息 输错三次后退出程序 升级需求: 可以支持多个用户登录 (提示,通过列表存多个账户信息) 用户3次认证失败后,退出程序,再次启动程序 ...

  8. python编译成手机可用程序_Python 程序打包成 exe 可执行文件

    可执行文件:对于非码农用户或者一些小白用户,你让他装个 Python 同时还要折腾一堆依赖库,那简直是个灾难.对于此类用户,最简单的方式就是提供一个可执行文件,只需要把用法告诉他即可.比较麻烦的是需要 ...

  9. python运行mcmc为何老出错_python中mcmc方法的实现

    MCMC方法在贝叶斯统计中运用很多,MIT发布的EMCEE是实现的比较好的.介绍页面在下面.源代码中examples里的代码可以帮助理解各种功能,特别是line.py 列出了最小二乘法,最大似然法和M ...

最新文章

  1. MongoDB极简教程
  2. Programming Entity Framework-dbContext 学习笔记第五章
  3. 你不知道的三种在for循环中使用setTimeout的方法
  4. 程序员应对浏览器同源策略的姿势
  5. HBase ACL管理 Hbase 权限管理
  6. 实战_02_Spring SpringMVC 整合Mybaits
  7. python爬取内容乱码_python爬取html中文乱码
  8. linux学习之路之使用脚本来复制二进制程序和所需的库文件
  9. 探索科学的奥秘之门Science,Cell, Nature
  10. selenium模拟登陆LinkedIn
  11. 彻底卸载anaconda教程
  12. 光伏窗性能研究(3)——单层光伏窗节能性能研究
  13. Python常用模块 之 base64模块
  14. 20200528 前端开发日报
  15. 外显子名词解释_生物信息学常用名词解释(四)
  16. uni的numberbox怎么用_uni-app购物车功能
  17. ADI Blackfin DSP处理器-BF533的开发详解59:DSP控制ADXL345三轴加速度传感器的应用2(含源码)
  18. 【网页版 GitHub】操作指南(搜索、下载等)
  19. 一起学Pandas系列基础篇---loc和iloc
  20. 爬取京东评论并生成词云

热门文章

  1. 【网络安全】Metasploit生成的Shellcode的导入函数解析以及执行流程分析(2)
  2. Windows进程与线程学习笔记(七)—— 时间片管理
  3. 160个Crackme015
  4. 静态分析android代码, 循环与trycatch
  5. Class 'PDO' not found 错误
  6. 【PAT乙级】1088 三人行 (20 分)
  7. VScode的基础设置
  8. 新建Angular2项目
  9. 【leetcode】762. 二进制表示中质数个计算置位
  10. 【Java】6.2 处理对象