动态进度条
文章目录
- 动态进度条
- 前言
- 一、显示效果
- 二、基本思路
- 1.引入库
- 2.基本参数
- 3.数据处理
- 三、数据处理
- 1.计算完成百分比
- 2.动态显示进度条
- 3.打印完成时间
- 总结
前言
大家在下载东西的时候都会看到有一个动态的进度条在那里。进度条走完了也就下载完了。下面我写一个简易版的动态进度条,希望能对大家有所启发。
一、显示效果
大概就是这么回事儿,有那么一丝丝味儿吧?哈哈哈哈哈
很简单,大家往下看。
二、基本思路
1.引入库
代码如下:
import time
进度条计时用的。
2.基本参数
代码如下(示例):
# 进度条长度
scale = 100# 开始时间
start_time = time.time()
首先要设置一下进度条长度,就像下载一个东西总得有大小,要不然没完没了。
然后开始计时,下面进度条开始走。
3.数据处理
代码如下(示例):
# 执行循环任务
for ....in.range:.......... #数据处理# 当循环完成后,添加新行以清除最后的进度条
print()
print(f'进度条走完共用时{int(elapsed_time)}秒')
数据处理大概就是这么个结构。
for循环结构会根据上面scale值进一步处理,最后走完了会另起一行打印一条消息告诉你用了多长时间。
三、数据处理
1.计算完成百分比
代码如下(示例):
# 执行循环任务
for i in range(scale + 1):# 计算完成百分比percent_complete = (i / scale) * 100#进度条中的#和空白的大小hashes = '#' * int(percent_complete)spaces = ' ' * (scale - len(hashes))
首先把进度条中主要元素的值都算出来。像 #、空格、百分比等。。。
然后下面进一步把它们打印出来。
2.动态显示进度条
代码如下(示例):
# 组装并打印进度条print(f'\rProgress: [{hashes}{spaces}] {percent_complete:.0f}%', end='')# 添加一点延迟以观察进度条的变化time.sleep(0.1)
第一段中的 \r要注意:
\r 是一个转义序列,它表示回车(carriage return)。当 \r 被打印到终端时,光标会移动到当前行的开头,但不会换行。这意味着你可以用 \r 来覆盖同一行上的先前输出。
第二段代码的意思是:
让进度条每走一下停顿一下,这样才能看出来动态的效果。要不噌的一下完了没视觉效果。
3.打印完成时间
代码如下(示例):
# 当循环完成后,添加新行以清除最后的进度条
end_time = time.time()
elapsed_time = end_time - start_time
print()
print(f'进度条走完共用时{int(elapsed_time)}秒')
print():换行的效果。
总结
我个人感觉哈,这个跟我们平时看到的进度条原理大致是一样的。只不过区别是:
- 把静态输入改成了动态输入(下载文件大小);
- 进度条走的快慢由我设置的每次走1改成了已下载的流量大小;
- 把完成时间改成了剩余时间(剩余文件大小 / 当前网速)。